[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 478

 
abolk:

по ссылке https://www.mql5.com/ru/code похожих целый склад

ты дал ссылку на целый огромный раздел )))

забавно

 

Добрый день!

Прошу помощи, убился уже, не могу до ума довести!!! Мне нужно, чтобы при достижении +20 п., SL ордера переставлялся на цену открытия, т.е функция выдавала 77

 for(i=(OrdersTotal()-1); i>=0; i--) // перебор ордеров 
         { 
       if (!OrderSelect(i, SELECT_BY_POS))
      {
         continue;
      }

      if (OrderSymbol()!=Instr||OrderMagicNumber()!=MN)
          continue;
      if(OrderStopLoss()==OrderOpenPrice())
            break;    
       if (   OrderProfit()>=(MarketInfo(Symbol(),MODE_TICKVALUE)*Bezub)        ) 
   return(77);
                  
           }
   

Никак не могу заставить работать

 
demlin:

Мне нужно, чтобы при достижении +20 п., SL ордера переставлялся на цену открытия, т.е функция выдавала 77

20 п так не вычисляются, нужно использовать ф-цию OrderOpenPrice() и сравнивать с текущей ценой, видимо Вы хотите при достижении положительного или нулевого профита ордера вернуть результат 77, тогда примерно так:

for(i=(OrdersTotal()-1); i>=0; i--) // перебор ордеров 
         { 
            if (!OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) continue;
            if (OrderSymbol()!=Instr||OrderMagicNumber()!=MN)  continue;
            if(OrderStopLoss()==OrderOpenPrice()) break;    
            if ( OrderProfit()>=0)) return(77);
           }
ф-ция OrderProfit() возвращает прибыль ордера в валюте депозита, а не в пп
 
Подскажите плиз, можно ли в советнике получить данные индикатора (из тех которые это позволяют делать) от другого индикатора. Что то не нашел в типах цены такой возможности.
 
IgorM:

20 п так не вычисляются, нужно использовать ф-цию OrderOpenPrice() и сравнивать с текущей ценой, видимо Вы хотите при достижении положительного или нулевого профита ордера вернуть результат 77, тогда примерно так:

ф-ция OrderProfit() возвращает прибыль ордера в валюте депозита, а не в пп

Я примерно так и думал, я не вычисляю 20 п. Они заданы в переменной Bezub. Я пытаюсь сравнить текущую прибыль ордера в валюте депозита (OrderProfit()) и требуемый уровень 20 п в валюте депозита ((MarketInfo(Symbol(),MODE_TICKVALUE)*Bezub)
 
demlin:
Я примерно так и думал, я не вычисляю 20 п. Они заданы в переменной Bezub. Я пытаюсь сравнить текущую прибыль ордера в валюте депозита (OrderProfit()) и требуемый уровень 20 п в валюте депозита ((MarketInfo(Symbol(),MODE_TICKVALUE)*Bezub)

тогда Вы забыли учесть текущую цену и сколько пп прошла цена от момента выставления ордера:

(OrderOpenPrice() -Bid)*MarketInfo(Symbol(),MODE_TICKVALUE)*Bezub

ZZZEROXXX:
Подскажите плиз, можно ли в советнике получить данные индикатора (из тех которые это позволяют делать) от другого индикатора. Что то не нашел в типах цены такой возможности.

iCustom()

https://book.mql4.com/ru/samples/shared
 
IgorM:

тогда Вы забыли учесть текущую цену и сколько пп прошла цена от момента выставления ордера:

(OrderOpenPrice() -Bid)*MarketInfo(Symbol(),MODE_TICKVALUE)*Bezub


Опробовал Вашу схему. Алерт выдает для выражения (OrderOpenPrice() -Bid)*MarketInfo(Symbol(),MODE_TICKVALUE)*Bezub значения -0,033. Хотя в профите 21 п ! Это нормально??
 
demlin:
Опробовал Вашу схему. Алерт выдает для выражения (OrderOpenPrice() -Bid)*MarketInfo(Symbol(),MODE_TICKVALUE)*Bezub значения -0,033. Хотя в профите 21 п ! Это нормально??

извини, пишу не проверяя, я тут неправильно подсказал, примерно так должно работать:

Sell:(OrderOpenPrice()-Bid)*MarketInfo(Symbol(),MODE_TICKVALUE)*lot/Point

Buy: (Ask-OrderOpenPrice())*MarketInfo(Symbol(),MODE_TICKVALUE)*lot/Point

 
IgorM:

извини, пишу не проверяя, я тут неправильно подсказал, примерно так должно работать:

Sell:(OrderOpenPrice()-Bid)*MarketInfo(Symbol(),MODE_TICKVALUE)*lot/Point

Buy: (Ask-OrderOpenPrice())*MarketInfo(Symbol(),MODE_TICKVALUE)*lot/Point

Это тоже пока не красивые цифры дает. По-моему дело не в формуле. Выражение (MarketInfo(Symbol(),MODE_TICKVALUE)*Bezub) само по себе в принципе дает 20 для евродоллара. Дело в где-то в цикле for
 
IgorM:

извини, пишу не проверяя, я тут неправильно подсказал, примерно так должно работать:

Sell:(OrderOpenPrice()-Bid)*MarketInfo(Symbol(),MODE_TICKVALUE)*lot/Point

Buy: (Ask-OrderOpenPrice())*MarketInfo(Symbol(),MODE_TICKVALUE)*lot/Point

Это тоже пока не красивые цифры дает. По-моему дело не в формуле. Выражение (MarketInfo(Symbol(),MODE_TICKVALUE)*Bezub) само по себе в принципе дает 20 для евродоллара. Дело где-то в цикле for
Причина обращения: