Perdón por sacar un tema relativamente antiguo. He entendido todo con el código.
Ahora tengo un rompecabezas, cómo abrir un comercio. Por ejemplo, justo después de un rango determinado, buscamos
El precio es inferior al máximo en una determinada cantidad de puntos. Abrimos un trato.
He intentado añadir dicho código y ejecutarlo en el probador, pero no abre los tratos.
¿Qué debo hacer?
Esto debería funcionar, no lo he probado yo mismo, ya que el terminal está ocupado optimizando otro EA hasta ahora
#define magic 123456789externint StartHour=16;
externint StartMinute=1;
externint StopHour=17;
externint StopMinute=59;
bool Flag=true; // Флаг разрешения открытия позиции, чтобы не плодить бесконечное число ордеровdouble lots=0.1;// размер лотаdouble sl=100; // стоплосс в пунктахdouble tp=100; // тейкпрофит в пунктахint ticket=-1;
int OldBar;
int init() {
sl=NormalizeDouble(sl*Point,Digits);//стоплосс в поинтах
tp=NormalizeDouble(tp*Point,Digits);//тейкпрофит в поинтахreturn(0);}
int deinit() {return(0);}
int start(){
staticdouble Maximum=-1;
int StartTime=StartHour*60+StartMinute;
int StopTime=StopHour*60+StopMinute;
if(StopTime<=StartTime) {Print("ERROR: Неправильные времена"); return(0);}
int CurrentMinutesFromDayStart=Hour()*60+Minute();// Текущее время в минутах от начала дняdatetime td=iTime(Symbol(),PERIOD_D1,0);// Время открытия дневного бара в секундах от 01.01.1970if(CurrentMinutesFromDayStart<StartTime) {Maximum=-1;Flag=true;}// Если StartTime еще не настало, то после StopTime нужно пересчитать Maximum и можно открывать ордер// В 22:55 Принудительно закрываем ордерif(CurrentMinutesFromDayStart>22*60+55 && ticket>=0) if(OrderSelect(ticket,SELECT_BY_TICKET)) if(OrderCloseTime()==0) if(OrderClose(ticket,OrderLots(),Ask,30,Magenta)) ticket=-1;
if(CurrentMinutesFromDayStart>StopTime && Maximum<0) {// если максимум ещё не посчитанdatetime ts=td+StartTime*60;// начало временного диапазона в секундах от 01.01.1970int start= iBarShift(Symbol(),PERIOD_M1,ts,false);// смещение бара, которому принадлежит ts
ts=td+StopTime*60;// конец временного диапазона в секундах от 01.01.1970int count= iBarShift(Symbol(),PERIOD_M1,ts,false);// смещение бара, которому принадлежит ts
count=start-count;// Сколко баров длится временной интервал
Maximum=iHigh(Symbol(),PERIOD_M1,iHighest(Symbol(),PERIOD_M1,MODE_HIGH,count,start));//Находим максимум на заданном временном интервале
}
if(Maximum>0 && Flag) {
double signal = Maximum - Bid;
if (signal-12*Point>0.0) { // к примеру если ниже максимума на 12 пунктов, в этом случае откроем SELL
ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,30,Ask+sl,Ask-tp,"My order",magic,0,Blue);
if(ticket>=0) Flag=false;// Ордер открылся, сегодня больше не открываем.
}
}
return(0);
}
¿Se puede eliminar esta línea o no funcionará sin ella? No entiendo por qué tengo que cerrar un pedido.
Por supuesto que se puede quitar, es sólo para probarlo y no para multiplicar el número de órdenes abiertas. Esto es sólo un ejemplo de entrenamiento de un EA. No abre más de una orden de VENTA por día. Y en su EA, usted mismo debe decidir cómo cerrar las órdenes: por stop loss, take profit u otras condiciones. Se elige la hora 22:55 porque muchas empresas de corretaje aumentan significativamente el diferencial, especialmente los viernes después de las 23:00. Puede pensar que deberíamos abrir más de un pedido al día. Y este es un ejemplo para una orden colocada a un lado. Debemos buscar el mínimo por analogía. Este código como ejemplo, espero que facilite la creación de mi propio EA)
for (int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if (OrderMagicNumber() != i_magic) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderType() > 1) continue; // Все удалённые отложки нас не интересуют..if (lastOrderCloseTime < OrderCloseTime()) // Находим время закрытия..
lastOrderCloseTime = OrderCloseTime(); // ..последней закрытой позиции в историиif (MathAbs(OrderTakeProfit() - OrderOpenPrice()) < i_tp * pt) return(0); // ЗДЕСЬ ВЫХОДИМ ПРИ ПЕРВОМ ВСТРЕЧНОМ
lastOOTHist = OrderOpenTime(); // Тогда время открытия последней закрытой позиции из истории
}
De hecho, sí, he echado un vistazo esta mañana. Resulta que la primera orden, que tiene más ganancia que la requerida, da una señal para continuar la función (es decir, no se pierde) y entonces, por supuesto, todo estará mal.
¿Puedes decirme cómo configurar la optimización del Asesor Experto para que muestre también los resultados de los pases negativos?
En la pestaña con los resultados de la optimización, haz clic con el botón derecho en cualquier resultado y desmarca "no mostrar resultados inútiles" (o algo así).
¡Hola!
Perdón por sacar un tema relativamente antiguo. He entendido todo con el código.
Ahora tengo un rompecabezas, cómo abrir un comercio. Por ejemplo, justo después de un rango determinado, buscamos
El precio es inferior al máximo en una determinada cantidad de puntos. Abrimos un trato.
He intentado añadir dicho código y ejecutarlo en el probador, pero no abre los tratos.
¿Qué debo hacer?
Esto debería funcionar, no lo he probado yo mismo, ya que el terminal está ocupado optimizando otro EA hasta ahora
Esto debería funcionar, no lo he probado yo mismo ya que el terminal está ocupado optimizando otro EA
Esto debería funcionar, no lo he probado yo mismo ya que el terminal está ocupado optimizando otro EA
¿Puedo eliminar esta línea o no funcionará sin ella? No entiendo por qué tengo que cerrar el pedido.
¿Se puede eliminar esta línea o no funcionará sin ella? No entiendo por qué tengo que cerrar un pedido.
Por supuesto que se puede quitar, es sólo para probarlo y no para multiplicar el número de órdenes abiertas. Esto es sólo un ejemplo de entrenamiento de un EA. No abre más de una orden de VENTA por día. Y en su EA, usted mismo debe decidir cómo cerrar las órdenes: por stop loss, take profit u otras condiciones. Se elige la hora 22:55 porque muchas empresas de corretaje aumentan significativamente el diferencial, especialmente los viernes después de las 23:00. Puede pensar que deberíamos abrir más de un pedido al día. Y este es un ejemplo para una orden colocada a un lado. Debemos buscar el mínimo por analogía. Este código como ejemplo, espero que facilite la creación de mi propio EA)
¡Hola!
Soy un tonto, pero quiero cambiar algo en el código yo mismo...
Cualquier consejo, si no te importa tu tiempo...
Tengo algunas preguntas:
1. ¿Cómo puedo añadir un "stop loss" variable a mi EA? Quiero poder cambiarlo, por supuesto.
2. ¿Cómo habilitar mi EA para añadir un comentario para cada una de mis operaciones?
3. ¿Cómo puedo añadir un número Magic a mi EA?
¡Hola!
Soy un tonto, pero quiero cambiar algo en el código yo mismo...
Cualquier consejo, si no te importa tu tiempo...
Tengo algunas preguntas:
1. ¿Cómo puedo añadir un "stop loss" variable a mi EA? Quiero poder cambiarlo, por supuesto.
2. ¿Cómo habilitar mi EA para añadir un comentario para cada una de mis operaciones?
3. ¿Cómo añadir un EA con un número mágico?
1. external double StopLoss=100.0;//añade la variable stop loss
2-3. int ticket=OrderSend(Symbol, TypeOfOrder,LotsOfOrder ,OpenPriceOrder,Slippage ,OpenPriceOfOrder+/-StopLoss,OpenPriceOrder-/+TakeProfit,YourMagicNumber,0, CLR_NONE) ;
4. ¡LEER!
Aquí está la junta:
¡Buenas tardes!
¿Puedes decirme cómo configurar la optimización del Asesor Experto para que muestre también los resultados de los pases negativos?
¡Buenas tardes!
¿Puedes decirme cómo configurar la optimización del Asesor Experto para que muestre también los resultados de los pases negativos?