//+----------------------------------------------------------------------------+//| Возвращает номер бара открытия последней позиции или -1. |//| Параметры: |//| sym - наименование инструмента ("" - текущий символ) |//| tf - таймфрейм ( 0 - текущий таймфрейм) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+intNumberOfBarOpenLastPos(stringsym="", inttf=0, intop=-1, intmn=-1){datetimeoot;
inti, k=OrdersTotal();
if(sym=="")sym=Symbol();
for(i=0; i<k; i++){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if(OrderSymbol()==sym){if(OrderType()==OP_BUY || OrderType()==OP_SELL){if(op<0 || OrderType()==op){if(mn<0 || OrderMagicNumber()==mn){if(oot<OrderOpenTime())oot=OrderOpenTime();
}}}}}}return(iBarShift(sym, tf, oot, True));
}
Y para que funcione, inserta la línea antes de la compra/venta :
if(NumberOfBarOpenLastPos(здесь сам всё расставь)>0){//если на текущ. баре не было сделок //хххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххif(Bid - iOpen(NULL,0,0)>=Delta*Point)//Цена выросла на больше или = Delta пунктов//продаем-{ticket=OrderSend(Symbol(),1,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"продал",MagicNumber,22222,Red);
if(ticket<0){Print("Ошибка открытия ордера SELL #",GetLastError());return(0);}}//-------------------------------------------------------------------------if(iOpen(NULL,0,0)-Bid >Delta*Point)//цена упала более дельты - покупаем{ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,
"Купил",MagicNumber,11111,Green);
if(ticket<0){Print("Ошибка открытия ордера BUY #",GetLastError());return(0);}}//ххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххх}
Así es como lo hice, se compiló bien. ¿No habrá trampas?
//------------------------------
//+----------------------------------------------------------------------------+
//| Возвращает номер бара открытия последней позиции или -1. |
//| Параметры: |
//| sym - наименование инструмента ("" - текущий символ) |
//| tf - таймфрейм ( 0 - текущий таймфрейм) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//+----------------------------------------------------------------------------+
int NumberOfBarOpenLastPos(string sym="", int tf=0, int op=-1, int mn=-1) {
datetime oot;
int i, k=OrdersTotal();
if (sym=="") sym=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sym) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (oot<OrderOpenTime()) oot=OrderOpenTime();
}
}
}
}
}
}
return(iBarShift(sym, tf, oot, True));
}
int start()
{
if (NumberOfBarOpenLastPos()>0)
if(OrdersTotal()!=0) return; //Выполнять только одну сделку.
//---
if (Ask - iOpen(NULL,0,0)>=Delta*Point) //Цена выросла больше Delta пунктов - продаем!!!
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"Продал");
}
//-------------------------------------------------------------------------
if (iOpen(NULL,0,0)-Bid >=Delta*Point) //цена упала больше Delta пунктов - покупаем!!!
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"Купил");
}
//----
return(0);
}
Y también, ¿esta línea en el código será redundante? :
if(OrdersTotal()!=0) return; //Выполнять только одну сделку.
Otro percance. Tratando de hacer funcionar el código anterior. Aparece un error en el registro con el texto: 18:38:23 '153085': orden de venta de 1,00 GBPUSD de apertura a 2,0006 sl: 2,0019 tp: 2,0003 fallida [S/L o T/P no válidos]. ¿Qué significa esto?
salesman77: De nuevo un problema. Estoy probando el código descrito arriba. Aparece un error en el registro con el texto: 18:38:23 '153085': orden de venta de 1,00 GBPUSD de apertura a 2,0006 sl: 2,0019 tp: 2,0003 fallida [S/L o T/P no válidos]. ¿Qué significa esto?
1) ¿Y qué DT utilizas para MT4?
2) ¿Cuál es la distancia permitida de stoploss y takeprofit en esta casa de bolsa?
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
Insertar una función al final del código -
Y para que funcione, inserta la línea antes de la compra/venta :
y ver qué pasa.Todavía hay errores... errores...
//------------------------------ //+----------------------------------------------------------------------------+ //| Возвращает номер бара открытия последней позиции или -1. | //| Параметры: | //| sym - наименование инструмента ("" - текущий символ) | //| tf - таймфрейм ( 0 - текущий таймфрейм) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfBarOpenLastPos(string sym="", int tf=0, int op=-1, int mn=-1) { datetime oot; int i, k=OrdersTotal(); if (sym=="") sym=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sym) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (oot<OrderOpenTime()) oot=OrderOpenTime(); } } } } } } return(iBarShift(sym, tf, oot, True)); } int start() { if (NumberOfBarOpenLastPos()>0) if(OrdersTotal()!=0) return; //Выполнять только одну сделку. //--- if (Ask - iOpen(NULL,0,0)>=Delta*Point) //Цена выросла больше Delta пунктов - продаем!!! { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"Продал"); } //------------------------------------------------------------------------- if (iOpen(NULL,0,0)-Bid >=Delta*Point) //цена упала больше Delta пунктов - покупаем!!! { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"Купил"); } //---- return(0); }Y también, ¿esta línea en el código será redundante? :Tratando de hacer funcionar el código anterior. Aparece un error en el registro con el texto:
18:38:23 '153085': orden de venta de 1,00 GBPUSD de apertura a 2,0006 sl: 2,0019 tp: 2,0003 fallida [S/L o T/P no válidos].
¿Qué significa esto?
De nuevo un problema.
Estoy probando el código descrito arriba. Aparece un error en el registro con el texto:
18:38:23 '153085': orden de venta de 1,00 GBPUSD de apertura a 2,0006 sl: 2,0019 tp: 2,0003 fallida [S/L o T/P no válidos].
¿Qué significa esto?
1) ¿Y qué DT utilizas para MT4?
2) ¿Cuál es la distancia permitida de stoploss y takeprofit en esta casa de bolsa?