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

 
Правильно ли это? Он закроет только ордера за последние 100 минут.
if(Bid>CloseforBuy)
{
   for(int a=OrdersTotal()-1;a>=0;a--)
      if( OrderSelect(a,SELECT_BY_POS, MODE_TRADES) && 
      OrderType()==OP_BUY && TimeCurrent()-OrderOpenTime() <= 100  &&
      OrderSymbol()==Symbol() )
         if( !OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 1000, White) )
            Print("OrderClose failed, error: ", GetLastError());
            }



if(Ask<CloseforSell)
{
   for(int b=OrdersTotal()-1;b>=0;b--)
      if( OrderSelect(b,SELECT_BY_POS, MODE_TRADES) && 
      OrderType()==OP_SELL &&  TimeCurrent()-OrderOpenTime() <= 100  &&
      OrderSymbol()==Symbol() )
         if( !OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 1000, White) )
            Print("OrderClose failed, error: ", GetLastError());
            }
 
ats:
Правильно ли это? Будут закрыты только ордера за последние 100 минут.

Практически, TimeCurrent() выдает datetime, представляющий серверное время последнего тика. . . .

Примечание: тип datetime (целое число, представляющее количество секунд , прошедших с полуночи 1 января 1970 года).

Поэтому вам нужно проверить, что ...

TimeCurrent()-OrderOpenTime() <=

100 минут . . . . или (100 * 60) секунд.

 

Большое спасибо за вашу помощь!

Счастливой торговли!

 

Здравствуйте!

Я пытался модифицировать советника, но он не работает должным образом. Есть ли у вас идеи, где ошибка?

Спасибо.

extern double TPforBuys=1;
extern double TPforSells=1;
extern double TimeForEA=120;

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{

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

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


double TPbuy = TPforBuys / 10000;
double TPB=OrderOpenPrice()+ TPbuy;

// Close Buys
if(Bid>TPB)
{
   for(int a=OrdersTotal()-1;a>=0;a--)
      if( OrderSelect(a,SELECT_BY_POS, MODE_TRADES) && 
      OrderType()==OP_BUY && TimeCurrent()-OrderOpenTime() <= (TimeForEA * 60)  &&
      OrderSymbol()==Symbol() )
         if( !OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 1000, White) )
            Print("OrderClose failed, error: ", GetLastError());
            }



double TPsell = TPforSells / 10000;
double TPS=OrderOpenPrice()- TPsell;



// Close Sells
if(Ask<TPS)
{
   for(int b=OrdersTotal()-1;b>=0;b--)
      if( OrderSelect(b,SELECT_BY_POS, MODE_TRADES) && 
      OrderType()==OP_SELL &&  TimeCurrent()-OrderOpenTime() <= (TimeForEA * 60) &&
      OrderSymbol()==Symbol() )
         if( !OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 1000, White) )
            Print("OrderClose failed, error: ", GetLastError());
            }


return(0);
}
 

Попробуйте изменить на это и посмотрите, работает ли это "правильно" ...

TimeCurrent()- OrderOpenTime() >= (TimeForEA * 60) // time to close
 

Правильно! Советник закрывает только ордера, которые не старше 2 часов! Проблема в том, что он не закрывает корректно все ордера после 1 пункта! Но я не знаю, где ошибка!

Спасибо

 
ats:

Правильно! Советник закрывает только ордера, которые не старше 2 часов! Проблема в том, что он не закрывает корректно все ордера после 1 пункта! Но я не знаю, где ошибка!

Спасибо

То есть он работает так, как вы хотите, я прав? Потому что я понятия не имею, что вы имеете в виду под "работать правильно", и я достаточно ленив и поэтому не читаю 4 страницы ответов и кодов.

Так что на самом деле, я не знаю точно, почему я дал вам этот ответ :)

 
onewithzachy:

Так что, на самом деле, я не знаю точно, почему я дал вам такой ответ :)

Приятно видеть честность в Интернете для разнообразия :-)
 
onewithzachy:

Значит, все работает так, как вы хотите, я прав? Потому что я понятия не имею, что вы имеете в виду под "работать правильно", и я достаточно ленив и поэтому не читаю 4 страницы ответов и кодов.

Так что на самом деле, я не знаю точно, почему я дал вам этот ответ :)

Нет проблем! Спасибо!
 

Когда вы делаете это...

double TPB=OrderOpenPrice()+ TPbuy;

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

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