Простая тема - цель такая, каждая цена в 10пп ставим ордер!!! Как??? - страница 3

 

Попробуйте так, наверняка прокатит:

     if (OrderOpenPrice()==NormalizeDouble(Price,Digits)) return;
     if((total<1)||(NormalizeDouble(Price,Digits)==NormalizeDouble(Bid,Digits)))//------------ открытие первого ордера в обе стороны
      {
       OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,NormalizeDouble(Ask+TakeProfit*Point,Digits),"MA sample",Magic,0,Blue); 
       OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,NormalizeDouble(Bid-TakeProfit*Point,Digits),"MA sample",Magic,0,Red); 
        return(0);
      }
 

extern int StopLoss = 1000; // Размер стопа в пунктах
extern int TakeProfit = 8; // Размер тейка в пунктах
extern double Lots = 0.1; // Размер лота
extern int pips = 10; // шаг
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if (OrdersTotal()<=0)

{ OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-StopLoss*Point,Ask+TakeProfit*Point,"TST",0,0,Green);
}
int i=OrdersTotal();
OrderSelect(i-1,SELECT_BY_POS);
double price=OrderOpenPrice();

//----
if(Bid>=price+pips*Point)


{ OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Ask+StopLoss*Point,Bid-TakeProfit*Point,"TST",0,0,Red);
}
if(Ask<=price-pips*Point)

{ OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-StopLoss*Point,Ask+TakeProfit*Point,"TST",0,0,Green);
}
}


-а я вот так когда-то сделал

 
api >>:

Попробуйте так, наверняка прокатит:


  Спасибо!!! Стал вроде ставить, иногда несколько раз на одну цену, это поправлю, 

OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,NormalizeDouble(Ask+TakeProfit*Point,Digits),"MA sample",Magic,0,Blue); 

обясните что делает "NormalizeDouble(Ask+TakeProfit*Point,Digits)" так и не понял???
 
serii5533 >>:

extern int StopLoss = 1000; // Размер стопа в пунктах
extern int TakeProfit = 8; // Размер тейка в пунктах
extern double Lots = 0.1; // Размер лота
extern int pips = 10; // шаг
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if (OrdersTotal()<=0)

{ OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-StopLoss*Point,Ask+TakeProfit*Point,"TST",0,0,Green);
}
int i=OrdersTotal();
OrderSelect(i-1,SELECT_BY_POS);
double price=OrderOpenPrice();

//----
if(Bid>=price+pips*Point)


{ OrderSend(Symbol(),OP_SELL,Lots,Bid,0,Ask+StopLoss*Point,Bid-TakeProfit*Point,"TST",0,0,Red);
}
if(Ask<=price-pips*Point)

{ OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-StopLoss*Point,Ask+TakeProfit*Point,"TST",0,0,Green);
}
}


-а я вот так когда-то сделал


Спасибо за оригинальное решение, в нашем случае он периодически сдвигается на пункт и в итоги цена меняется, в нашем случае нужно достичь строго по 10пп.
Еще раз спасибо интересное решение!!!!
 
Mer495 писал(а) >>


обясните что делает "NormalizeDouble(Ask+TakeProfit*Point,Digits)" так и не понял???

Вместо TP=1.23450001 делает TP=1.2345.
Цену 1.23450001 сервер не принимает, а цену 1.2345 - принимает. А при печати эти две цены одинаково выглядят.

 
api >>:

Вместо TP=1.23450001 делает TP=1.2345.
Цену 1.23450001 сервер не принимает, а цену 1.2345 - принимает. А при печати эти две цены одинаково выглядят.


Спасибо!!! Теперь я понял, я не знал что цена приходит такая  1.23450001, теперь понятно!!!
 
api писал(а) >>

Попробуйте так, наверняка прокатит:


Респект!
Реально простое решение!

А Вы говорите в голову только кушаете :))
Причина обращения: