Надо всё засунуть в одно условие
if(newBar()) { if(Условие на покупку...) if(Условие на продажу...) }
и к условию на покупку\продажу добавить проверку наличия уже открытых ордеров.
Потом, как я понял надо открыть Buy и закрыть Sell, но по коду открывается Buy и закрывается тоже Buy.
Закрыть "на закрытии" свечи можно только посчитав время прошедшее от открытия свечи, но тики приходят не регулярно и очень велика вероятность того, что время закрытия будет пропущено. Пока, как я понимаю, работать с OnTimer() для тебя сложно, поэтому лучше закрывать на открытии следующей свечи.
тут надо бы учесть еще что возможно время поступления котировок на открытии дневного бара не совпадает с началом торговли. такое бывает. если у его брокера такая же петрушенция как у моего то его експерт с таким упрощенным кодом начнет глючить да так что это не понравиться брокеру.. лучше закрывать/открывать позу на последней минуте закрытия дня когда еще спреды не расширены.. ну если он намерен работать внутри дня то можно и такой код применить без опций
Надо всё засунуть в одно условие
и к условию на покупку\продажу добавить проверку наличия уже открытых ордеров.
Потом, как я понял надо открыть Buy и закрыть Sell, но по коду открывается Buy и закрывается тоже Buy.
Закрыть "на закрытии" свечи можно только посчитав время прошедшее от открытия свечи, но тики приходят не регулярно и очень велика вероятность того, что время закрытия будет пропущено. Пока, как я понимаю, работать с OnTimer() для тебя сложно, поэтому лучше закрывать на открытии следующей свечи.
тут надо бы учесть еще что возможно время поступления котировок на открытии дневного бара не совпадает с началом торговли. такое бывает. если у его брокера такая же петрушенция как у моего то его експерт с таким упрощенным кодом начнет глючить да так что это не понравиться брокеру.. лучше закрывать/открывать позу на последней минуте закрытия дня когда еще спреды не расширены.. ну если он намерен работать внутри дня то можно и такой код применить без опций
Спасибо, да советник будет работать только внутри дня, по мере своего познания в MQL буду его совершенствовать на правильную проверку ошибок и т.д, В планах есть добавить пару индикаторов
//+------------------------------------------------------------------+ //| test.mq4 | //| Copyright 2016, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2016, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #include <stdlib.mqh> extern double Lots=0.1; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if(newBar()) { string symbol=_Symbol; int i,cmd,n,ticketsell[],ticketbuy[]; ArrayResize(ticketsell,11,11); ArrayResize(ticketbuy,11,11); int sell=0; int buy=0; bool result; for(i=OrdersTotal()-1; i>=0; i--) { if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; if(OrderSymbol()!=symbol) continue; cmd=OrderType(); if(cmd>OP_SELL) continue; if(cmd==OP_SELL) { ticketsell[sell]=OrderTicket(); sell++; } else { ticketbuy[buy]=OrderTicket(); buy++; } } //---closebuy i=0; n=0; while(i<buy) { result=OrderClose(ticketbuy[i],0.1,Bid,3,clrNONE); if(!result) { n++; if(n>=3) break; // количество попыток закрыть buy if(Fun_Error(GetLastError())==1) continue; else break; } else i++; } //---closesell i=0; n=0; while(i<sell) { result=OrderClose(ticketsell[i],0.1,Ask,3,clrNONE); if(!result) { n++; if(n>=3) break; // количество попыток закрыть sell if(Fun_Error(GetLastError())==1) continue; else break; } else i++; } //---buy if(buy==0) { int Buy_ticket=OrderSend(symbol,OP_BUY,0.1,Ask,3,Low[1],0,NULL,0,0,clrNONE); } //---sell if(sell==0) { int Sell_ticket=OrderSend(symbol,OP_SELL,0.1,Bid,3,High[1],0,NULL,0,0,clrNONE); } } } //+------------------------------------------------------------------+ bool newBar() { static datetime lastbar=0; datetime curbar=Time[0]; if(lastbar!=curbar) { lastbar=curbar; return (true); } else return(false); } //------------------------------------------------ Error-handling function int Fun_Error(int Error) { Comment(" Error: "+ErrorDescription(Error)+""); switch(Error) { //--- Overcomable errors. case 4: Sleep(5000); return(1); // Trade server is busy. Retry. case 135: RefreshRates(); return(1); // Price changed. Retry. case 136: Comment("OFF QUOTES. WAITING FOR NEW TICK."); while(RefreshRates()==false && IsStopped()==false) Sleep(100); return(1); case 137: Sleep(5000); return(1); // Broker is busy. case 138: Sleep(200); RefreshRates(); return(1); // Requote. Retry. case 6: Comment("NO CONNECTION WITH TRADE SERVER. WAITING FOR CONNECTION."); while(IsConnected()==false && IsStopped()==false) Sleep(500); return(1); case 146: Sleep(5000); return(1); // Trade context is busy. Retry. case 8: Sleep(10000); return(1); // Too frequent requests. Retry. case 128: Sleep(5000); return(1); // Trade timeout. Retry. //---- Critical errors. default: return(0); } } //+------------------------------------------------------------------+для открытия ордеров нужно добавить функцию обработки ошибок также как это сделано для закрытия ордеров чтобы в случае ошибки не пропустить сигнал. в противном случае придется ждать следующего открытия бара
для открытия ордеров нужно добавить функцию обработки ошибок также как это сделано для закрытия ордеров чтобы в случае ошибки не пропустить сигнал. в противном случае придется ждать следующего открытия бара
для открытия ордеров нужно добавить функцию обработки ошибок также как это сделано для закрытия ордеров чтобы в случае ошибки не пропустить сигнал. в противном случае придется ждать следующего открытия бара
Единственно там порядок получается
if(условие на покупку) {
//ваш код в функции OnTick()
}
if(условие на продажу){
//ваш код в функции OnTick()
}
?

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Когда открывается новая свеча, то открываю сделку
Не могу понять, как закрыть ордер на закрытии этой новой свечи, пробовал делать так
Но ордер не закрывается,либо открывается, а потом сразу закрывается. Подскажите, как это правильно сделать, спасибо