Как принудительно проверить журнал ? - страница 2

 

конечно если было бы достаточно отсутсвия открытого ордера или ордеров по определенному инструменту

====================================================================

 я пробовал писать с OrdersTotal когда он "0" и когда Orders < или >до закрытия (работа с одним ордером) по всякому  все равно проблема оставалась работает - работает потом пропустит работает пропустит в общем не получилось

    if (Orders!=OrdersTotal()){if(OrdersTotal()<Orders){Orders=OrdersTotal();

Сейчас и функцию переделал на цикл из примеров учебника: 

    while(true){   RefreshRates();         // Цикл закрытия орд.

              if (OrdersTotal()==0){Print (" Нечего удалять ");break;} // Если орд. нет выход из цикла закр

                  price = MarketInfo (OrderSymbol(),MODE_ASK);

                  Print("Попытка закрыть SE   ",LotSE,". Ожидание ответа..");

                  Ans=OrderClose (OrderTicket(),OrderLots(),price,3,0);// Закрытие  BU  

              if (Ans==true) {Print ("Закрыт ордер SE ",LotSE);}// Получилось :)

              if (Fun_Error(GetLastError())==1) // Обработка ошибок

                   continue; // Повторная попытка

   break;} // Выход из while

 

 Работает в тестере. Но логика такова , что нельзя работать советнику пока нет достоверной информации о ЗАКРЫТОМ ордере то что Вы посоветовали прописал осталось только подождать "тиков" от сервера 

 


 

Да там еще бывало не срабатывало когда вручную закроешь ордер от сюда и задача чтобы из журнала брать информацию. Даже так - удалил руками советник просмотрел что как , выставил на этой информации следующий. Или так , есть возможность (углядел я сам точку входа) купил , оставил на попечение советника, закрылся орд. опять смотрит что как и продолжает дальше сам. Это все работает весь вопрос в этих пропусках ,из за невозможности или не знания как просмотреть журнал и дождаться "последнего"   ордера.

Александр.

 
Boeing747:

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

    


Эксперт послал команду на удаление дождался(мониторя историю) когда он появится и пропустил дальше в остальную программу. 
 
Boeing747:

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

    

могу только так сделать :  

 1) от int start()  будет производиться подсчет открытых ордеров по нужному инструменту и с учетом магического номера

 за этой частью кода располагается условие

if ( Total_Sell == 0 || Total_Buy == 0 )

{

return;  // отсечка нижней части кода от тиков 

}  

//===========================================

// тело программы  

// ===========================================

 // здесь будет функция закрытия ордера начинающаяся с условия  x  на закрытие ордера генерируемое телом программы та что сверху

if ( x == true )

{

while( true )

{

 // здесь будет закрываться ордер по тикеру  ордера номер которого поставляется верхней частью кода и где происходит подсчет рыночных ордеров

}

return(0);

 это будет работать таким образом :

если есть открытые ордера в теле функции будет проверятся не настало ли условие x = true  для закрытия ордера . и если настало то в теле цикла while ( true ) будет

произведено нужное количество попыток закрыть ордер.. и пока не закроется ордер тики в эксперт не будут поступать.  ( можно задать любое количество попыток закрыть ордер ) после закрытия ордера с приходом нового тика сперва начнется подсчет количества

ордеров в верхней части кода и почти всегда Total_Sell или Total _Buy  будут равны нулю..   

 
Boeing747:

могу только так сделать :  

 1) от int start()  будет производиться подсчет открытых ордеров по нужному инструменту и с учетом магического номера

 за этой частью кода располагается условие

if ( Total_Sell == 0 || Total_Buy == 0 )

{

return;  // отсечка нижней части кода от тиков 

}  

//===========================================

// тело программы  

// ===========================================

 // здесь будет функция закрытия ордера начинающаяся с условия  x  на закрытие ордера генерируемое телом программы та что сверху

if ( x == true )

{

while( true )

{

 // здесь будет закрываться ордер по тикеру  ордера номер которого поставляется верхней частью кода и где происходит подсчет рыночных ордеров

}

return(0);

 это будет работать таким образом :

если есть открытые ордера в теле функции будет проверятся не настало ли условие x = true  для закрытия ордера . и если настало то в теле цикла while ( true ) будет

произведено нужное количество попыток закрыть ордер.. и пока не закроется ордер тики в эксперт не будут поступать.  ( можно задать любое количество попыток закрыть ордер ) после закрытия ордера с приходом нового тика сперва начнется подсчет количества

ордеров в верхней части кода и почти всегда Total_Sell или Total _Buy  будут равны нулю..   

 

вам написать такой код? вероятность что будет окрыт "лишний ордер"  при таком варианте ничтожно мала
 
Boeing747:
вам написать такой код? вероятность что будет окрыт "лишний ордер"  при таком варианте ничтожно мала
пардон. при условии if ( Total_Sell == 0 &&  Total _Buy == 0 )  нижняя часть кода будет отсекаться от тиков 
 
и еще вопрос . если эксперт послал команду на закрытие ордера а потом верхняя часть кода будет запирать остальную часть кода до тех пор пока не появится тикер в экаунт хистори. то не может ли быть так что этот тикер так и не окажется в историческом списке из- за  какой нибудь ошибки при отправки приказа на закрытиии..эксперт встанет как вкопанный .что тогда делать ?
 
Может просто паузу сделаете для выполнения операции. Это значительно проще 
 
Boeing747:
и еще вопрос . если эксперт послал команду на закрытие ордера а потом верхняя часть кода будет запирать остальную часть кода до тех пор пока не появится тикер в экаунт хистори. то не может ли быть так что этот тикер так и не окажется в историческом списке из- за  какой нибудь ошибки при отправки приказа на закрытиии..эксперт встанет как вкопанный .что тогда делать ?
еще есть другая проблема: дело в том что в исторической базе подсчет ордеров простым методом который у вас в коде будет происходит на последовательности увеличения числа отображающего номер ордера и если эксперту придется работать с большим количеством ордеров то будет ошибка в выборе последнего ордера . например открыты два рыночных ордера с номерами 1223 и 1226 . понятно что 1223 открыт первым но если сперва закрыть ордер 1226 а потом 1223 то окажется что 1226 закрыт последним..
 
Vinin:
Может просто паузу сделаете для выполнения операции. Это значительно проще 
да пожалуй вы правы. )))
Причина обращения: