[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 232

 
DhP:

А в чем разница между double tmp и NormalizeDouble(iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0)?

Перемножение их всегда будет больше нуля.

Я так думаю))

(-) * (-) = +

(+) * (+) = +


а.... вы абсолютно правы... NormalizeDouble(iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0) - тут вместо 0 надо поставить "i" - я изменил это дело, но сделки он так и не начал заключать....

теперь код выглядит так:

 bool signal_MACD() 
  { 
    bool signal_MACD = false;
    double tmp = iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0); 
    for(int i=1;i<=5;i++) 
    { 
       if(NormalizeDouble(iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,i)*tmp,4)<0.0) 
       { 
          signal_MACD = true; 
          break; 
       }        
    } 
    return(signal_MACD);
  } 

но все ранво не работает

 
CLAIN:


а.... вы абсолютно правы... NormalizeDouble(iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0) - тут вместо 0 надо поставить "i" - я изменил это дело, но сделки он так и не начал заключать....

теперь код выглядит так:

но все ранво не работает

В таком варианте true на false меняется?

Функция меняет выходное значение?

 
CLAIN:


а.... вы абсолютно правы... NormalizeDouble(iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0) - тут вместо 0 надо поставить "i" - я изменил это дело, но сделки он так и не начал заключать....

теперь код выглядит так:

но все ранво не работает


Используйте "Print", читайте журналы и сравнивайте "то, что есть" с тем,"что ожидается".
 

Функция значения не меняет.... по крайней мере я так сужу, потому что сделки так и не начали открываться.

а как использовать принт?

 bool signal_MACD() 
  { 
    bool signal_MACD = false;
    double tmp = iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0); 
    for(int i=1;i<=5;i++) 
    { 
       if(NormalizeDouble(iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,i)*tmp,4)<0.0) 
       { 
          signal_MACD = true; 
          Print(NormalizeDouble(iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,i)*tmp);
          break; 
       }        
    } 
    return(signal_MACD);
  } 

у меня только такая версия, но что-то мне кажется, что она тоже неверная....

 
CLAIN:

Функция значения не меняет.... по крайней мере я так сужу, потому что сделки так и не начали открываться.

а как использовать принт?

у меня только такая версия, но что-то мне кажется, что она тоже неверная....


Print("iMACD(",Symbol(),",",TF,",",fast_ema,",",slow_ema,",",signal_period,",",PRICE_CLOSE,",",MODE_MAIN,",",i,",",")*",tmp,"=",iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,i)*tmp);
 
MaxZ:

Если все переменные объявлены, то ошибок в синтаксисе MQL4 не вижу...

А в чём проблема то?

Благодарю.

Делаю подсчёт отката для своего советника. Увидел неточность рассчётов, поэтому и стал перебирать блоки, в которых может содержаться ошибка.

 


Привет.

Помогите разобраться
Я пишу советник не могу разобраться с ордерами.
У меня выставляются ордера:
OrderSend(Symbol(),OP_SELLLIMIT,lot,cena_sell,3,sl _sell,tp_sell,"",1,0,Red);
Alert (GetLastError());

OrderSend(Symbol(),OP_SELLLIMIT,lot_1,cena_sell_d_ 1,3,sl_sell,tp_sell_d_1,"",2,0,Red);
Alert (GetLastError());

OrderSend(Symbol(),OP_SELLLIMIT,lot_2,cena_sell_d_ 2,3,sl_sell,tp_sell_d_2,"",3,0,Red);
Alert (GetLastError());

OrderSend(Symbol(),OP_SELLLIMIT,lot_3,cena_sell_d_ 3,3,sl_sell,tp_sell_d_3,"",4,0,Red);
Alert (GetLastError());
Мне надо:
Если срабатывает первый take profit, удалить остальные ордера.
Если первый не сработал, а сработал второй take profit, у третьего и четвертого поменять лоты lot_3 и lot_4.

 
sergey_r:


Привет.

Помогите разобраться
Я пишу советник не могу разобраться с ордерами.
У меня выставляются ордера:
OrderSend(Symbol(),OP_SELLLIMIT,lot,cena_sell,3,sl _sell,tp_sell,"",1,0,Red);
Alert (GetLastError());

OrderSend(Symbol(),OP_SELLLIMIT,lot_1,cena_sell_d_ 1,3,sl_sell,tp_sell_d_1,"",2,0,Red);
Alert (GetLastError());

OrderSend(Symbol(),OP_SELLLIMIT,lot_2,cena_sell_d_ 2,3,sl_sell,tp_sell_d_2,"",3,0,Red);
Alert (GetLastError());

OrderSend(Symbol(),OP_SELLLIMIT,lot_3,cena_sell_d_ 3,3,sl_sell,tp_sell_d_3,"",4,0,Red);
Alert (GetLastError());
Мне надо:
Если срабатывает первый take profit, удалить остальные ордера.
Если первый не сработал, а сработал второй take profit, у третьего и четвертого поменять лоты lot_3 и lot_4.


Что первое пришло - задействуете ф-ию с этой странички форума - возвращает флаг закрытия ордера по тейку. До этого в зависимости от Ваших (разных) объемов ордеров - устанавливаете каждому из них свой магик_намбер, т.е. лот - магик 1, лот1 - магик 2 и т.д. После чего проверяете закрытие ордера с магиком 1 по тейку, используя эту ф-ию, если да, то "остальные удаляете". Далее по коду, также проверяете второй ордер с магиком №2 - если да, то модифицируете третий и четвертый ордера (меняете их объемы), естественно не забывая при установки отложенников и их модификации выполнять проверку на мин. допуски и все остальное... Как то так...
 

Я не понимаю как использовать функции. Не мог бы описать как это сделать?

Вот я выставил эти ордера. Далее вставляю функцию с той странички. Или как ? Опиши пример как это сделать. Плиз.

 
sergey_r:

Я не понимаю как использовать функции. Не мог бы описать как это сделать?

Вот я выставил эти ордера. Далее вставляю функцию с той странички. Или как ? Опиши пример как это сделать. Плиз.



Порядок работы с ф-ми - это базовые вещи, вокруг чего все вертится... Разберите по косточкам, посмотрите примеры сов (в грамотном коде), в кодебазе они встречаются - разберите этот пример сова, на его основе уже и ваяйте свой... Это база, без этого - никак. Сам выложил сова на основе этого примера в кодебазу.

Спокойно, не спеша - разбирайтесь.

Причина обращения: