Здравствуйте! Подскажите, пожалуйста функцию открытие противоположной сделки после закрытия стопа?
Здравствуйте! Подскажите, пожалуйста функцию открытие противоположной сделки после закрытия стопа?
Функция OrderCloseBy в MQL4. Экономит один спред.
/ OrderCloseBy
|
OrderCloseBy
Закрытие одним открытым ордером другого ордера, открытого по тому же самому инструменту, но в противоположном направлении.
bool OrderCloseBy( |
Параметры
ticket
[in] Уникальный порядковый номер закрываемого ордера.
opposite
[in] Уникальный порядковый номер противоположного ордера.
arrow_color
[in] Цвет стрелки закрытия на графике. Если параметр отсутствует, или его значение равно CLR_NONE, то стрелка на графике не отображается.
Возвращаемое значение
Возвращает true при успешном завершении функции или false в случае ошибки. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Пример:
if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75) |
Функция OrderCloseBy в MQL4. Экономит один спред.
/ OrderCloseBy
|
OrderCloseBy
Закрытие одним открытым ордером другого ордера, открытого по тому же самому инструменту, но в противоположном направлении.
bool OrderCloseBy( |
Параметры
ticket
[in] Уникальный порядковый номер закрываемого ордера.
opposite
[in] Уникальный порядковый номер противоположного ордера.
arrow_color
[in] Цвет стрелки закрытия на графике. Если параметр отсутствует, или его значение равно CLR_NONE, то стрелка на графике не отображается.
Возвращаемое значение
Возвращает true при успешном завершении функции или false в случае ошибки. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
Пример:
if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75) |
А как эту функцию использовать в коде:
int start() { int tiket; if(Time[0]==prevtime) return(0); prevtime=Time[0]; if(OrdersTotal()<1) { double STF0 = iMA(Symbol(), 0, MA1_Period, 0, 3, 4, 0); double STF1 = iMA(Symbol(), 0, MA1_Period, 0, 3, 4, 1); double MA1 = iMA(Symbol(), 0, MA1_Period, 0, 3, 4, 0); double MA2 = iMA(Symbol(), 0, MA2_Period, 0, 3, 4, 0); double MA3 = iMA(Symbol(), 0, MA3_Period, 0, 3, 4, 0); if(((STF1>STF0) && (MA1>MA2)) && (MA2>MA3)) // Buy { tiket=OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),Slippage,NormalizeDouble(Ask-Sl*Point,Digits),0,"",Magic,0,clrGreen); if(tiket<0) { Print("Ошибка при выборе ордера BUY #",GetLastError()); prevtime=Time[1]; } } if(((STF1<STF0) && (MA1<MA2)) && (MA2<MA3)) // Sell { tiket=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),Slippage,NormalizeDouble(Bid+Sl*Point,Digits),0,"",Magic,0,clrRed); if(tiket<0) { Print("Ошибка при выборе ордера BUY #",GetLastError()); prevtime=Time[1]; } } }
Нужно вычислить значение стопа. SL_BUY=Ask-Sl*Point,Digits, и вставить проверку условия: если ASK<SL_BUY то применяем функцию OrderCloseBy() согласно логике вашего кода.
У меня получается так. При этом выдает ошибку OrderCloseBy error 4051.
if(OrdersTotal()<1) { double STF0 = iMA(Symbol(), 0, MA1_Period, 0, 3, 4, 0); double STF1 = iMA(Symbol(), 0, MA1_Period, 0, 3, 4, 1); double MA1 = iMA(Symbol(), 0, MA1_Period, 0, 3, 4, 0); double MA2 = iMA(Symbol(), 0, MA2_Period, 0, 3, 4, 0); double MA3 = iMA(Symbol(), 0, MA3_Period, 0, 3, 4, 0); if(((STF1>STF0) && (MA1>MA2)) && (MA2>MA3)) // Buy { SL_BUY=NormalizeDouble(Ask-Sl*Point,Digits); tiket1=OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),Slippage,SL_BUY,0,"",Magic,0,clrGreen); if(tiket1<0) { Print("Ошибка при выборе ордера BUY #",GetLastError()); prevtime=Time[1]; } } if(Ask<SL_BUY) { OrderCloseBy(tiket1,tiket2,clrNONE); return(0); } if(((STF1<STF0) && (MA1<MA2)) && (MA2<MA3)) // Sell { SL_SELL=NormalizeDouble(Bid+Sl*Point,Digits); tiket2=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),Slippage,SL_SELL,0,"",Magic,0,clrRed); if(tiket2<0) { Print("Ошибка при выборе ордера BUY #",GetLastError()); prevtime=Time[1]; } } if(Bid<SL_SELL) { OrderCloseBy(tiket2,tiket1,clrNONE); return(0); } }
Вместо if(Bid<SL_SELL) должно быть if(Bid>SL_SELL) открыт ордер на продажу и Bid должен быть больше .
Это фрагмент кода и мне трудно судить о правильности. Попробуйте.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования