Перейти к содержимому

Theme© by Fisana
 

Фотография
* * * * * 68 Голосов

Написание экспертов и индикаторов - бесплатно!


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 18761

#3496 Michelangelo®

Michelangelo®

    МОРДЕ-РАПТОР

  • Профи
  • PipPipPipPipPipPipPipPipPipPipPipPipPip
  • 1003 сообщений

Отправлено 20 March 2011 - 13:16

Michelangelo, еще раз спасибо. Но я же там в P.S. написал, что решил уже проблему) Но с тем же советником возникла опять трабла, ну не хватает моих знаний.. В общем захотелось мне сделать закрытие всех позиций при достижении определенной прибыли. Моего мозга хватило только вот на это

if (ExistPositions()) {
   if (AccountProfit()>=Corridor*Lot()*10) {
   	bool   result;
 		double price;
 		int    error;
      if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
 	{
 		while(ExistPositions())
   		{
            if(OrderType()==OP_BUY) price=Bid;
            else            price=Ask;
            result=OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);
            if(result!=TRUE) { error=GetLastError(); Print("LastError = ",error); }
   		else error=0;
            if(error==135) RefreshRates();
            else break;
   		}
        }
 	
   else Print( "Error when order select ", GetLastError());
}
return(0);}

Но в итоге почему то если 1 ордер, то он правильно закрывает, а если больше, то там совсем другая прибыль получается.. Какие есть альтернативы вот этой строчке if (AccountProfit()>=Corridor*Lot()*10) ?

Ну а NormalizeDouble потом введу, если результаты нормальными окажутся..



честно говоря - вне контекста сложно сказать... но если ты хочешь закрыть ВСЕ позиции - закрывай их циклом:


for (i=OrdersTotal()-1; i>=0; i--){
   if (OrderSelect(i,SELECT_BY_POS)){
      if (OrderSymbol()==Symbol()){
 		if (OrderType()==OP_BUY){
            RefreshRates();
            OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
 		}
 		if (OrderType()==OP_SELL){
            RefreshRates();
            OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);
 		}
      }
   }
}

аккуратней используй while - можешь получить бесконечный цикл... :)
Изображение
Возможно все! ...что ниже скорости света!
Невозможное делаю сразу! Чудо требует незначительной подготовки...
Пришел, увидел, нафлудил...

Изображение

 
 

#3497 Jarets

Jarets

    Первый выстрел

  • Частый гость
  • PipPip
  • 2 сообщений

Отправлено 20 March 2011 - 14:57

Нужен простой советник для MT4.

Условия: Он должен открывать ордер в 00:00:01 если в течении суток не сработали S/L или T/P закрывать ордер в 23:59:59. Если сработали S/L или T/P, то в течении суток больше он не торгует. Валютная пара EUR/USD. Лот 0.01. Вход на рынок зависит от последней фигуры на графике D1, если цена закрытия была ниже, чем открытия на 50 пунктов, открывается ордер SELL, в остальном, открывается ордер BUY.

Сообщение отредактировал Jarets: 20 March 2011 - 15:02


#3498 Batmannk

Batmannk

    Расстрелял целый магазин

  • Пользователи
  • PipPipPipPip
  • 54 сообщений

Отправлено 20 March 2011 - 15:18

Michelangelo, Впринципе мой цикл работает правильно, и основной кусок взял из стандартного скрипта закрытия) Он закрывает все позиции, не зацикливается, тут все ок. Но как я уже говорил он неправильно определяет профит при котором нужно закрывать. То есть переделать нужно только строчку if (AccountProfit()>=Corridor*Lot()*10). Какие данные мне нужно уточнить? Corridor это некое числовое значение, не меняется, допустим сейчас это 20. Lot() тоже константа. Если еще что-то нужно уточнить скажи что.

#3499 Batmannk

Batmannk

    Расстрелял целый магазин

  • Пользователи
  • PipPipPipPip
  • 54 сообщений

Отправлено 20 March 2011 - 16:11

Jarets, держи, мне все равно делать нечего..
Как ни странно не сливает, но торгует в 0..
Ставить на D1

Прикрепленные файлы



#3500 Jarets

Jarets

    Первый выстрел

  • Частый гость
  • PipPip
  • 2 сообщений

Отправлено 20 March 2011 - 17:02

Jarets, держи, мне все равно делать нечего..
Как ни странно не сливает, но торгует в 0..
Ставить на D1


СПАСИБО!

#3501 Ivv

Ivv

    Первый выстрел

  • Частый гость
  • PipPip
  • 6 сообщений

Отправлено 20 March 2011 - 17:04

Здравствуйте!

Погите создать советник.

Алгоритм советника

Индикаторы:
1. Moving Averade:
T=14, Сдвиг=0, Метод МА-Simple, Применить к Close;
2. Bolinger Bands:
T=10, Сдвиг=0, Отклонение-2, Применить к Close;
3. MACD:
Быстрый EMA-12, Медленный EMA-26, MACD SMA-9, Применить к Close;
4. Average Directional Movement Index:
T=14, Применить к Close, +ID, -ID;
5. Relative Strength Index:
T=14, Применить к Close, min=0, max=100, Уроввни 30 и 70.
6. Moving Averade:
T=5, Сдвиг=0, Метод МА-Simple, Применить к Close;
7. Moving Averade:
T=21, Сдвиг=0, Метод МА-Simple, Применить к Close;

Кол-во отрытых ордеров до 10.

Закрытие открытых ордеров через 72 часа.

Открытие позиции на Покупку:

1. Relative Strength Index проходит уровень <=30;
2. 30<=Relative Strength Index<=65;
3. MACD имеет отрицательное значение, которое уменьшается по модулю;
4. Average Directional Movement Index :+ID пересекает -ID снизу вверх;
5. Moving Averade: (T=5, Сдвиг=0, Метод МА-Simple, Применить к Close) пересекает снизу вверх среднию линию Bolinger Bands: (T=10, Сдвиг=0, Отклонение-2, Применить к Close);

Закрытие позиции на Покупку:

1.Мoving Averade: (T=5, Сдвиг=0, Метод МА-Simple, Применить к Close) находится выше Moving Averade:
(T=21, Сдвиг=0, Метод МА-Simple, Применить к Close);
2.. Average Directional Movement Index :+ID достигнув max уменьшается.

Открытие позиции на Продажу:

1. Relative Strength Index проходит уровень >=70;
2. 70>=Relative Strength Index>=35;
3. MACD имеет положительное значение, которое уменьшается;
4. Average Directional Movement Index :+ID пересекает -ID сверху вниз;
5. Мoving Averade: (T=5, Сдвиг=0, Метод МА-Simple, Применить к Close) пересекает сверху вниз Moving Averade:
(T=21, Сдвиг=0, Метод МА-Simple, Применить к Close);

Закрытие позиции на Продажу:

1.Мoving Averade: (T=5, Сдвиг=0, Метод МА-Simple, Применить к Close) находится ниже Moving Averade:
(T=21, Сдвиг=0, Метод МА-Simple, Применить к Close);
2.. Average Directional Movement Index :+ID достигнув min увеличивается.

Заранее благодарен,

Ivv



Сообщение отредактировал Ivv: 20 March 2011 - 17:13


#3502 Michelangelo®

Michelangelo®

    МОРДЕ-РАПТОР

  • Профи
  • PipPipPipPipPipPipPipPipPipPipPipPipPip
  • 1003 сообщений

Отправлено 20 March 2011 - 17:23

Michelangelo, Впринципе мой цикл работает правильно, и основной кусок взял из стандартного скрипта закрытия) Он закрывает все позиции, не зацикливается, тут все ок. Но как я уже говорил он неправильно определяет профит при котором нужно закрывать. То есть переделать нужно только строчку if (AccountProfit()>=Corridor*Lot()*10). Какие данные мне нужно уточнить? Corridor это некое числовое значение, не меняется, допустим сейчас это 20. Lot() тоже константа. Если еще что-то нужно уточнить скажи что.


тут вопрос - а чему вобще может быть равен коридо*лотс*10?
AccountProfit() - Возвращает значение прибыли для текущего счета в базовой валюте. Текущей прибыли? или прибыли вообще?
я с этой функцией не разбирался...
я предпочитаю пользовать конструкцию AccountEquity()-AccountBalans() - это и есть текущая прибыль по счету...
Изображение
Возможно все! ...что ниже скорости света!
Невозможное делаю сразу! Чудо требует незначительной подготовки...
Пришел, увидел, нафлудил...

Изображение

#3503 Batmannk

Batmannk

    Расстрелял целый магазин

  • Пользователи
  • PipPipPipPip
  • 54 сообщений

Отправлено 20 March 2011 - 18:03

тут вопрос - а чему вобще может быть равен коридо*лотс*10?
AccountProfit() - Возвращает значение прибыли для текущего счета в базовой валюте. Текущей прибыли? или прибыли вообще?
я с этой функцией не разбирался...
я предпочитаю пользовать конструкцию AccountEquity()-AccountBalans() - это и есть текущая прибыль по счету...


Коридор*лот*10=2 (если коридор 20, лот 0,01). То есть при достижении общей прибыли 2$ надо закрывать все..

Хм, ну я думаю все же текущую прибыль он возвращает, т.к. если была открыта только одна сделка он всегда правильно закрывает...

Попробовал сейчас вставить твою конструкцию вместо AccountProfit(), абсолютно тоже самое)

Еще какие-нибудь идеи есть?

Кстати, а можно как-нибудь сделать, чтобы он прям на графике показывал сколько сейчас прибыли в режиме визуализации? А то может быть все правильно он закрывает...

#3504 Michelangelo®

Michelangelo®

    МОРДЕ-РАПТОР

  • Профи
  • PipPipPipPipPipPipPipPipPipPipPipPipPip
  • 1003 сообщений

Отправлено 20 March 2011 - 19:07

Коридор*лот*10=2 (если коридор 20, лот 0,01). То есть при достижении общей прибыли 2$ надо закрывать все..

Хм, ну я думаю все же текущую прибыль он возвращает, т.к. если была открыта только одна сделка он всегда правильно закрывает...

Попробовал сейчас вставить твою конструкцию вместо AccountProfit(), абсолютно тоже самое)

Еще какие-нибудь идеи есть?

Кстати, а можно как-нибудь сделать, чтобы он прям на графике показывал сколько сейчас прибыли в режиме визуализации? А то может быть все правильно он закрывает...

пихай Comment(AccountProfit()) и смотри...
но вот все же Lot() - не константа - это судя по синтаксису - функция у тебя... :) и предполагаю, что она у тебя пересчитывается с каждым новым проходом... плюс ко всему что значит if(OrderSelect(0,SELECT_BY_POS) - ? т.е. если выбран 0 ордер - то его кроем... а как же остальные ордера?
весь код не вижу, но думаю алгоритм должен быть следующий:
- Если профит по всем сделкам больше или равен чему-то - то {
- перебрать все ордера (а это цикл) {
и закрыть к едрене фене...
}
}
в твоем коде эта конструкция не выдерживается...

т.е. закрытие всех ордеров должно быть внутри условия... а у тебя, по моему, после закрытия одного ордера - происходит опять проверка условия и оно может не выполниться, так как ты можешь первым ордером или неким еще закрыть большую часть прибыли и AccountProfit() станет меньше твоего условия...
Изображение
Возможно все! ...что ниже скорости света!
Невозможное делаю сразу! Чудо требует незначительной подготовки...
Пришел, увидел, нафлудил...

Изображение

#3505 transelvator

transelvator

    Выпустил первую очередь

  • Пользователи
  • PipPipPip
  • 13 сообщений

Отправлено 20 March 2011 - 19:13

Уважаемые программисты ответьте кто нибудь взялся за задание в посте #3441 ?

#3506 Michelangelo®

Michelangelo®

    МОРДЕ-РАПТОР

  • Профи
  • PipPipPipPipPipPipPipPipPipPipPipPipPip
  • 1003 сообщений

Отправлено 20 March 2011 - 19:21

Уважаемый МикельАнджело, извините за беспокойство, но не могли бы вы подкорректировать приложенный советник?


ТЗ:

1) Сделать так, чтобы на графике указывался стрелками бар, на котором была открыта сделка. А именно если открыта сделка бай, то зеленая стрелка вверх, если селл, то красная стрелка вниз.
2) Прикрутить к советнику RSI c возможностью включать его через тру/фалсе.1)
Условие: RSI>70 сделок на покупку не разрешать.RSI<20 сделок на продажу не разрешать.
3) Сделать так, чтобы советник обращался к старшему ТФ (поставьте Н1 и Н4 чтобы можно было выбрать самому) и смотрел сигнал там (так же через тру/фалс).

Смысл такой: Советник определяет какой последний сигнал на ТФ (Н4 или Н1). Если был сигнал селл, то при торговли на ТФ=М5 (я на нем торгую) советник будет открывать только селл позиции, если бай, то только бай позиции. Как только меняется сигнал на старшем ТФ то советник автоматически начинает открывать позиции в только в том направлении, в котором сигнал.
4) Добавить Traling stop
5) Добавить money manager. Так чтобы можно было сделать рост лота по следующим параметрам:
а) Начальный лот 1.0 (можно менять)
б) Советник при увеличении депозита на каждые 10000 (можно менять) увеличивает лот на 0.5 (можно менять).
в) Советник использует для торговли максимум 10% (можно выбирать) депозита.




Уважаемые программисты ответьте кто нибудь взялся за задание в посте #3441 ?


по сути вашей просьбы...
1) сделаю...
2) сделаю...
3) можно... но долго...
4) можно... стандартный...
5) можно, но дорого... т.е. не бесплатно... :)
исправления по пунктам 1-4 завтра выложу. по 5 - как определитесь... :)
Изображение
Возможно все! ...что ниже скорости света!
Невозможное делаю сразу! Чудо требует незначительной подготовки...
Пришел, увидел, нафлудил...

Изображение

#3507 Batmannk

Batmannk

    Расстрелял целый магазин

  • Пользователи
  • PipPipPipPip
  • 54 сообщений

Отправлено 20 March 2011 - 19:23

пихай Comment(AccountProfit()) и смотри...
но вот все же Lot() - не константа - это судя по синтаксису - функция у тебя... :) и предполагаю, что она у тебя пересчитывается с каждым новым проходом... плюс ко всему что значит if(OrderSelect(0,SELECT_BY_POS) - ? т.е. если выбран 0 ордер - то его кроем... а как же остальные ордера?
весь код не вижу, но думаю алгоритм должен быть следующий:
- Если профит по всем сделкам больше или равен чему-то - то {
- перебрать все ордера (а это цикл) {
и закрыть к едрене фене...
}
}
в твоем коде эта конструкция не выдерживается...

т.е. закрытие всех ордеров должно быть внутри условия... а у тебя, по моему, после закрытия одного ордера - происходит опять проверка условия и оно может не выполниться, так как ты можешь первым ордером или неким еще закрыть большую часть прибыли и AccountProfit() станет меньше твоего условия...


О, спасибо, сейчас буду смотреть))
Насчет Lot() она у меня определяет включен ли ММ, если включен, то это процент от депо, если выключен (как сейчас) то константа.
Опа, насчет того что там 0, я сам только заметил, как уже говорил, это я тупо из стандартного скрипта копировал :blink: Сейчас поправлю.

#3508 Michelangelo®

Michelangelo®

    МОРДЕ-РАПТОР

  • Профи
  • PipPipPipPipPipPipPipPipPipPipPipPipPip
  • 1003 сообщений

Отправлено 20 March 2011 - 19:31

Здравствуйте!

Погите создать советник.

Алгоритм советника

Индикаторы:
1. Moving Averade:
T=14, Сдвиг=0, Метод МА-Simple, Применить к Close;
2. Bolinger Bands:
T=10, Сдвиг=0, Отклонение-2, Применить к Close;
3. MACD:
Быстрый EMA-12, Медленный EMA-26, MACD SMA-9, Применить к Close;
4. Average Directional Movement Index:
T=14, Применить к Close, +ID, -ID;
5. Relative Strength Index:
T=14, Применить к Close, min=0, max=100, Уроввни 30 и 70.
6. Moving Averade:
T=5, Сдвиг=0, Метод МА-Simple, Применить к Close;
7. Moving Averade:
T=21, Сдвиг=0, Метод МА-Simple, Применить к Close;

Кол-во отрытых ордеров до 10.

Закрытие открытых ордеров через 72 часа.

Открытие позиции на Покупку:

1. Relative Strength Index проходит уровень <=30;
2. 30<=Relative Strength Index<=65;
3. MACD имеет отрицательное значение, которое уменьшается по модулю;
4. Average Directional Movement Index :+ID пересекает -ID снизу вверх;
5. Moving Averade: (T=5, Сдвиг=0, Метод МА-Simple, Применить к Close) пересекает снизу вверх среднию линию Bolinger Bands: (T=10, Сдвиг=0, Отклонение-2, Применить к Close);

Закрытие позиции на Покупку:

1.Мoving Averade: (T=5, Сдвиг=0, Метод МА-Simple, Применить к Close) находится выше Moving Averade:
(T=21, Сдвиг=0, Метод МА-Simple, Применить к Close);
2.. Average Directional Movement Index :+ID достигнув max уменьшается.

Открытие позиции на Продажу:

1. Relative Strength Index проходит уровень >=70;
2. 70>=Relative Strength Index>=35;
3. MACD имеет положительное значение, которое уменьшается;
4. Average Directional Movement Index :+ID пересекает -ID сверху вниз;
5. Мoving Averade: (T=5, Сдвиг=0, Метод МА-Simple, Применить к Close) пересекает сверху вниз Moving Averade:
(T=21, Сдвиг=0, Метод МА-Simple, Применить к Close);

Закрытие позиции на Продажу:

1.Мoving Averade: (T=5, Сдвиг=0, Метод МА-Simple, Применить к Close) находится ниже Moving Averade:
(T=21, Сдвиг=0, Метод МА-Simple, Применить к Close);
2.. Average Directional Movement Index :+ID достигнув min увеличивается.

Заранее благодарен,

Ivv




Вот вы тут велосипед изобрести пытаетесь...
вот грааль http://fxgeneral.com...st=0#entry23282 и ни чего более не надо... все просто и понятно... :)
Изображение
Возможно все! ...что ниже скорости света!
Невозможное делаю сразу! Чудо требует незначительной подготовки...
Пришел, увидел, нафлудил...

Изображение

#3509 Batmannk

Batmannk

    Расстрелял целый магазин

  • Пользователи
  • PipPipPipPip
  • 54 сообщений

Отправлено 20 March 2011 - 20:10

пихай Comment(AccountProfit()) и смотри...
но вот все же Lot() - не константа - это судя по синтаксису - функция у тебя... :) и предполагаю, что она у тебя пересчитывается с каждым новым проходом... плюс ко всему что значит if(OrderSelect(0,SELECT_BY_POS) - ? т.е. если выбран 0 ордер - то его кроем... а как же остальные ордера?
весь код не вижу, но думаю алгоритм должен быть следующий:
- Если профит по всем сделкам больше или равен чему-то - то {
- перебрать все ордера (а это цикл) {
и закрыть к едрене фене...
}
}
в твоем коде эта конструкция не выдерживается...

т.е. закрытие всех ордеров должно быть внутри условия... а у тебя, по моему, после закрытия одного ордера - происходит опять проверка условия и оно может не выполниться, так как ты можешь первым ордером или неким еще закрыть большую часть прибыли и AccountProfit() станет меньше твоего условия...



Уф, ты был прав, поменял конструкцию, теперь все работает правильно... Почти.. У меня только остался единственный вопрос. Какого черта в этой конструкции не учитывается спред????? Я же специально вместо тейков сделал такую функцию, чтоб он закрывался Ровно на 2$!! ну или чуть больше если ровно не получится.. А он, если 3 ордера откроет, то закрывается на 1,6;, то есть минусуется спред... Почему??

#3510 maximus73

maximus73

    Не сидит в окопе

  • Пользователи
  • PipPipPipPipPip
  • 69 сообщений

Отправлено 20 March 2011 - 20:37

Тут курсы по правописанию советников?



Copyright © 2024 Your Company Name