Как мне установить TP менее 5 пунктов? - страница 3

 
Я сделал коррекцию для ордеров на продажу или покупку, я торгую только eurusd, поэтому проблем с символами нет. Я не использую советников, поэтому все ордера выставляются вручную! Проблема в том, как отличить закрытие ордеров, которые у меня есть для скальпинга, от долгосрочных ордеров.
 
extern double CloseforBuy=1.4;
extern double CloseforSell=1.3;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()


{
if(OrderType()==OP_BUY)
{
if(Bid>CloseforBuy)
{
for(int a=OrdersTotal()-1;a>=0;a--)
if(OrderSelect(a,SELECT_BY_POS, MODE_TRADES) )
//if(OrderSymbol()==Symbol())
OrderClose(OrderTicket(),OrderLots( ),OrderClosePrice(),1000,White);
//----

}}
if(OrderType()==OP_SELL)
{
if(Ask<CloseforSell)
{
for(int b=OrdersTotal()-1;b>=0;b--)
if(OrderSelect(b,SELECT_BY_POS, MODE_TRADES) )
//if(OrderSymbol()==Symbol())
OrderClose(OrderTicket(),OrderLots( ),OrderClosePrice(),1000,White);
//----
}}

return(0);
}
 

Вы не можете сделать это ... .

if(OrderType()==OP_BUY)

... пока не будет выбрана функция OrderSelect() ... прочитайте документацию для OrderType(), там сказано: "Примечание: заказ должен быть выбран функциейOrderSelect() ".

Попробуйте . . .

if(Bid>CloseforBuy)
   {
   for(int a=OrdersTotal()-1;a>=0;a--)
      if( OrderSelect(a,SELECT_BY_POS, MODE_TRADES) && 
      OrderType()==OP_BUY &&
      OrderSymbol()==Symbol() )
         if( !OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 1000, White) )
            Print("OrderClose failed, error: ", GetLastError());

   }
 
deVries:

вы можете установить tp на 25 пунктов и закрыть сделку на 5 пунктов.

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

С наилучшими пожеланиями и удачной торговли!!!

 
RaptorUK:

Вы не можете сделать это . . .

. . . до тех пор, пока вы не сделаете OrderSelect() . . . . прочитайте документацию для OrderType() , там говорится: "Примечание: заказ должен быть выбран функциейOrderSelect() ".

Попробуйте . . . .

Спасибо большое за помощь я сделал исправление! Отлично!!!

Есть ли у вас предложения по фильтрации и закрытию одного из ордеров на покупку/продажу, а не всех. Чтобы можно было скальпировать и сохранять долгосрочные ордера!

Спасибо за помощь!!!

 
ats:

Спасибо большое за помощь, я сделал исправление! Отлично!!!

Есть ли у вас предложения по фильтрации и закрытию одного из бай/селл, а не всех ордеров. Чтобы можно было скальпировать и сохранять долгосрочные ордера!

Возможно, но это определяется вашей стратегией. . какой ордер вы хотите закрыть, а какой оставить работающим, когда вы это определите, это должно быть достаточно просто закодировать.
 

Определить, какой ордер вы хотите закрыть, очень просто. Это ордер для скальпинга! Скажем, последний ордер!

 

Основная идея заключается в следующем: 1. У вас есть открытые долгосрочные позиции, и вы хотите скальпировать

2. вы устанавливаете отложенный ордер

3. Вы включаете советника

4. Советник закрывает только ЭТОТ ордер

5. Вы выключаете советника

 
ats:

Определить, какой ордер вы хотите закрыть, очень просто. Это ордер для скальпинга! Скажем, последний ордер!

Последний выставленный ордер должен иметь самый большой номер позиции ордера ... вы можете дважды проверить с помощью OrderOpenTime()
 
RaptorUK:
Последний размещенный заказ должен иметь наибольший номер позиции заказа. ... Вы можете дважды проверить по OrderOpenTime().

Хорошая идея! Я не думал об этом