Стоп Лосс - страница 2

 
Artem Ashikhmin:
но отложенный ордер либо не открывается(ошибка 130), либо стоп лосс и тейк профит ставится с непонятными значениями.

Как решить данную проблему?

Про сетку я не слышал, проблема была с отложенным ордером.

 

Цитата: 
По идее когда открывается ордер, в том же направлении выставляются отложенные ордера.
Исходя из а) множественного числа; б) наличия цикла в коде; в) заданного шага, несложно сделать вывод, что ставится сетка отложенных ордеров с шагом Open_Step, в направлении рыночного ордера. Но это уже уточнит топикстартер, что-то он притих.
 
Vitalie Postolache:
Цитата: Исходя из а) множественного числа; б) наличия цикла в коде; в) заданного шага, несложно сделать вывод, что ставится сетка отложенных ордеров с шагом Open_Step, в направлении рыночного ордера. Но это уже уточнит топикстартер, что-то он притих.

Да тут все верно, сетка устанавливается с шагом Open_Step в направлении ордера.

 
Artem Ashikhmin:

Сделаем тогда по умному:

   open_step_2   = open_step_2 + Open_Step;
   double Price  = NormalizeDouble((Ask-Bid)/Point,Digits);
   double Step   = NormalizeDouble((Price + open_step_2) * Point, Digits);
   double PriceB = NormalizeDouble(Ask + Step, Digits);
   double PriceS = NormalizeDouble(Bid - Step, Digits);

if ( (SMMA1<MA28_1)){

            ticket=OrderSend(NULL,OP_BUY,Lots,Ask,3,NormalizeDouble(Bid-StopLoss*Point,Digits),NormalizeDouble(Bid+TakeProfit*Point,Digits),
            "EMA position:",16384,0,Green);        

       ticket2=OrderSend(Symbol(),OP_BUYSTOP, Lots2, PriceB,2,
NormalizeDouble((Bid+open_step_2)-SL*Point,Digits),NormalizeDouble((Bid+open_step_2)+TP*Point,Digits),"take_trend",MagicNumber2,0,Blue);


 

Не совсем понял, зачем создавать отдельно переменные. Плюс не ушла проблема с открытием на SELL, ошибка не пропала, а стопы на отложенниках выставляются также как я скидывал по результатам
 
Filya1212:
Не совсем понял, зачем создавать отдельно переменные. Плюс не ушла проблема с открытием на SELL, ошибка не пропала, а стопы на отложенниках выставляются также как я скидывал по результатам

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

Про SELL кода не было, но решается всё по аналогии с BUY. Главное - проверять значения, которые скармливаете функции за цену.

Например, в строке:

ticket2=OrderSend(Symbol(),OP_BUYSTOP, Lots2, PriceB,2,NormalizeDouble((Bid+open_step_2)-SL*Point,Digits),NormalizeDouble((Bid+open_step_2)+TP*Point,Digits),"take_trend",MagicNumber2,0,Blue)

в наличии попытка указать уровни стопа и профита частично в пунктах, вместо цены, конкретно вот - NormalizeDouble((Bid+open_step_2)-SL*Point,Digits),NormalizeDouble((Bid+open_step_2)+TP*Point,Digits).

Подставьте в расчёты реальные значения, результат получится далеко от нужного. Скорее всего скобки нужно расставить так: NormalizeDouble(Bid+(open_step_2-SL)*Point,Digits),NormalizeDouble(Bid+(open_step_2+TP)*Point,Digits)

 
Vitalie Postolache:

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

Про SELL кода не было, но решается всё по аналогии с BUY. Главное - проверять значения, которые скармливаете функции за цену.

Например, в строке:

ticket2=OrderSend(Symbol(),OP_BUYSTOP, Lots2, PriceB,2,NormalizeDouble((Bid+open_step_2)-SL*Point,Digits),NormalizeDouble((Bid+open_step_2)+TP*Point,Digits),"take_trend",MagicNumber2,0,Blue)

в наличии попытка указать уровни стопа и профита частично в пунктах, вместо цены, конкретно вот - NormalizeDouble((Bid+open_step_2)-SL*Point,Digits),NormalizeDouble((Bid+open_step_2)+TP*Point,Digits).

Подставьте в расчёты реальные значения, результат получится далеко от нужного. Скорее всего скобки нужно расставить так: NormalizeDouble(Bid+(open_step_2-SL)*Point,Digits),NormalizeDouble(Bid+(open_step_2+TP)*Point,Digits)

Поставил скобки, но большой разницы не увидел. Прилагаю скрин результатов, на тэйк профит и стоп лосс для отложника значение 1100, для первой сделки значение для стопа и тейка 1000, что-то мне подсказывает, что проблема не в шаге ибо на первом ордере его естественно нет

 

 
Filya1212:

Поставил скобки, но большой разницы не увидел. Прилагаю скрин результатов, на тэйк профит и стоп лосс для отложника значение 1100, для первой сделки значение для стопа и тейка 1000, что-то мне подсказывает, что проблема не в шаге ибо на первом ордере его естественно нет

Странная цена, это что за инструмент? Может там особые правила?

Покажите код, по которому сейчас получили такой результат, как-то странно выглядит заданный стоп на 1000 пипс, который в реальности 1075.

 
Vitalie Postolache:

Странная цена, это что за инструмент? Может там особые правила?

Покажите код, по которому сейчас получили такой результат, как-то странно выглядит заданный стоп на 1000 пипс, который в реальности 1075.

ticket=OrderSend(NULL,OP_SELL,Lots,Bid,3,NormalizeDouble(Ask+StopLoss*Point,Digits),NormalizeDouble(Ask-TakeProfit*Point,Digits),
            "EMA position:",16384,0,Green);
            for(i=stop_positions;i>=0; i--)
            {
          
      
       ticket2=OrderSend(Symbol(),OP_SELLSTOP, Lots2, PriceS,2,
NormalizeDouble(Ask-(open_step_2+SL)*Point,Digits),NormalizeDouble(Ask-(open_step_2-TP)*Point,Digits),"take_trend",MagicNumber2,0,Blue);//тут ошибка 130


ticket=OrderSend(NULL,OP_BUY,Lots,Ask,3,NormalizeDouble(Bid-StopLoss*Point,Digits),NormalizeDouble(Bid+TakeProfit*Point,Digits),
            "EMA position:",16384,0,Green);
            for(i=stop_positions;i>=0; i--)
            {
          
      
       ticket2=OrderSend(Symbol(),OP_BUYSTOP, Lots2, PriceB,2,
NormalizeDouble(Bid+(open_step_2-SL)*Point,Digits),NormalizeDouble(Bid+(open_step_2+TP)*Point,Digits),"take_trend",MagicNumber2,0,Blue);



 

 инструмент #NAS100_Z6

 
Filya1212:

ticket=OrderSend(NULL,OP_SELL,Lots,Bid,3,NormalizeDouble(Ask+StopLoss*Point,Digits),NormalizeDouble(Ask-TakeProfit*Point,Digits),
            "EMA position:",16384,0,Green);
            for(i=stop_positions;i>=0; i--)
            {
          
      
       ticket2=OrderSend(Symbol(),OP_SELLSTOP, Lots2, PriceS,2,
NormalizeDouble(Ask-(open_step_2+SL)*Point,Digits),NormalizeDouble(Ask-(open_step_2-TP)*Point,Digits),"take_trend",MagicNumber2,0,Blue);//тут ошибка 130


ticket=OrderSend(NULL,OP_BUY,Lots,Ask,3,NormalizeDouble(Bid-StopLoss*Point,Digits),NormalizeDouble(Bid+TakeProfit*Point,Digits),
            "EMA position:",16384,0,Green);
            for(i=stop_positions;i>=0; i--)
            {
          
      
       ticket2=OrderSend(Symbol(),OP_BUYSTOP, Lots2, PriceB,2,
NormalizeDouble(Bid+(open_step_2-SL)*Point,Digits),NormalizeDouble(Bid+(open_step_2+TP)*Point,Digits),"take_trend",MagicNumber2,0,Blue);

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

Не забывайте, что стоплосс для продажи должен быть выше цены открытия, а тейкпрофит - ниже. Для покупок - наоборот.

Где вычисляются  PriceS,PriceB? Где и как заданы SL, TP, StopLoss, TakeProfit, open_step_2?

 
Vitalie Postolache:

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

Не забывайте, что стоплосс для продажи должен быть выше цены открытия, а тейкпрофит - ниже. Для покупок - наоборот.

Где вычисляются  PriceS,PriceB? Где и как заданы SL, TP, StopLoss, TakeProfit, open_step_2?

extern double       StopLoss=1000;
extern double  TakeProfit=1000;


extern double TP=1100;
extern double SL=1100;

open_step_2=open_step_2+Open_Step;
double Price  = NormalizeDouble((Ask-Bid)/Point,Digits);
double Step   = NormalizeDouble((Price + open_step_2) * Point, Digits);
double PriceB = NormalizeDouble(Ask + Step, Digits);
double PriceS = NormalizeDouble(Bid - Step, Digits);
Да тут то дело уже не в отложниках, ведь на обычном ордере также стопы неверно выставляются 
 
Filya1212:
Да тут то дело уже не в отложниках, ведь на обычном ордере также стопы неверно выставляются 

Не вижу ошибки в рыночном ордере. Что именно там неверно, какая ошибка? Или просто не то значение?

На скриншоте выше, где цены указаны и уровни стопов, всё верно. Покупка по Аск 4791,00 но уровень стопа-то рассчитан по Бид. Если спред 75 пипс был, то всё верно.

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