Иметь цену открытия свечи в определенный час. - страница 2

 
Kane59:

Хорошо, я вставил ваш код в мой советник, и он отлично работает! Я улыбнулся, когда увидел, что советник работает так, как я хотел!!!

Большое спасибо ......

Это на бэктесте, потому что рынок закрыт...

Но есть проблема:

Советник правильно открывает позиции, но покупки никогда не закрываются, а продажи сразу же закрываются при открытии.

Разве вы не хотите знать, если ваш OrderClose() не сработал и если сработал, то почему? Почему вы не проверяете возвращаемое значение из функции OrderClose() и не сообщаете о любых ошибках? Вы можете обнаружить, что и Buy и Sell пытаются немедленно закрыться, но Buy OrderClose() не срабатывает....

Что такое возвращаемые значения функции? Как их использовать?

 

На вкладке "Журнал" ошибки нет.


Я буду размещать возвращаемые значения. Могу ли я это сделать?

Close = CloseOrder(....)

if (Close < 1)

Print ("Close Failed", GetLastError())
 
Kane59:

На вкладке "Журнал" ошибки нет.


Я буду размещать возвращаемые значения. Могу ли я это сделать?

Close имеет другое значение... OrderClose() возвращает bool...

if ( ! OrderClose(....) )

Print ("Close Failed", GetLastError())
 
RaptorUK:

Close имеет другое значение... OrderClose() возвращает bool...


Хорошо, я так и сделаю, спасибо :)
 

Я вставил:

if(OrdersTotal()>0)
            { 
               for(int i=OrdersTotal()-1; i>=0; i--)
               {
                  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                  {
                     if(OrderMagicNumber() == MagicSH && OrderOpenTime() > iTime(Symbol(), PERIOD_H1, 1))
                     {
                        if(OrderType() == OP_BUY)
                        {
                           OrderClose(OrderTicket(),LotsSH, bid, 300, CLR_NONE);
                           {
                              if(! OrderClose(OrderTicket(),LotsSH, bid, 300, CLR_NONE))
                              {
                                 Print ("Close Buy Failed", GetLastError());
                              }
                           }
                        }
                        if(OrderType() == OP_SELL)
                        {
                           OrderClose(OrderTicket(),LotsSH, ask, 300, CLR_NONE);
                           {
                              if(! OrderClose(OrderTicket(),LotsSH, ask, 300, CLR_NONE))
                              {
                                 Print ("Close Sell Failed", GetLastError());

Ошибка не записана.

 
Kane59:

Я вставил:

Ошибка не записана.

Вы не можете закрыть один и тот же ордер дважды...

 OrderClose(OrderTicket(),LotsSH, bid, 300, CLR_NONE);            //  first attempt to close
    {
    if(! OrderClose(OrderTicket(),LotsSH, bid, 300, CLR_NONE))       //  second attempt to close
 

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

Еще раз спасибо.

 

Привет всем,

Я использовал код, приведенный WHRoeder, но я вижу со временем, что EA принимает только один "#define", чтобы быть ссылкой для 4 различных часов.

    #define HR0900 23400    // 9*3600
    #define HR1500 54000
    #define HR1900 68400
    #define HR2300 59800

Я попробовал другой способ:

Я построил arraysize с Int, которые являются ссылкой на свечи, и это то же самое, только один считается не 4 числа, как я могу решить это?

 
Kane59:

Хорошо, я вставил ваш код в мой советник, и он отлично работает! Я улыбнулся, когда увидел, что советник работает так, как я хотел!!!

Что вы сделали, чтобы сломать кодWHRoeder?
 
Kane59:

. . . как я могу решить эту проблему?

Я думаю, вам нужно показать ваш код.