Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
конечно если было бы достаточно отсутсвия открытого ордера или ордеров по определенному инструменту
====================================================================
я пробовал писать с 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
Работает в тестере. Но логика такова , что нельзя работать советнику пока нет достоверной информации о ЗАКРЫТОМ ордере то что Вы посоветовали прописал осталось только подождать "тиков" от сервера
Да там еще бывало не срабатывало когда вручную закроешь ордер от сюда и задача чтобы из журнала брать информацию. Даже так - удалил руками советник просмотрел что как , выставил на этой информации следующий. Или так , есть возможность (углядел я сам точку входа) купил , оставил на попечение советника, закрылся орд. опять смотрит что как и продолжает дальше сам. Это все работает весь вопрос в этих пропусках ,из за невозможности или не знания как просмотреть журнал и дождаться "последнего" ордера.
Александр.
и каким образом будет осуществятся проверка условия для посылки команды на закрытие одера если закрыть ту часть программы от тиков которая отвечает за проверку этого условия? эксперт перестанет работать.
Эксперт послал команду на удаление дождался(мониторя историю) когда он появится и пропустил дальше в остальную программу.
и каким образом будет осуществятся проверка условия для посылки команды на закрытие одера если закрыть ту часть программы от тиков которая отвечает за проверку этого условия? эксперт перестанет работать.
могу только так сделать :
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 будут равны нулю..
могу только так сделать :
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 будут равны нулю..
вам написать такой код? вероятность что будет окрыт "лишний ордер" при таком варианте ничтожно мала
и еще вопрос . если эксперт послал команду на закрытие ордера а потом верхняя часть кода будет запирать остальную часть кода до тех пор пока не появится тикер в экаунт хистори. то не может ли быть так что этот тикер так и не окажется в историческом списке из- за какой нибудь ошибки при отправки приказа на закрытиии..эксперт встанет как вкопанный .что тогда делать ?
Может просто паузу сделаете для выполнения операции. Это значительно проще