Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 386

 

Hmm... No había pensado en cambiar las coordenadas. Gracias por el consejo.

Entonces, aquí hay una pregunta. Hay una condición de punto de entrada. Lo he implementado a través de variables estáticas, para que no se ponga a cero con cada tick. Pues bien, en algunos lugares del gráfico el robot dibuja un punto de entrada donde no hay niveles horizontales y, por tanto, su intersección con la MA. Por favor, ejecute el código en su probador y verá el problema. En el EURUSD. ¿Quizás este problema deba ser implementado de una manera diferente? No soy un profesional de la programación.

Es decir, el patrón ha aparecido, se han dibujado los niveles y el robot espera tres cruces de uno de los niveles.

¿Qué te parece?

 
voron_026:

Hmm... No había pensado en cambiar las coordenadas. Gracias por el consejo.

Entonces, aquí hay una pregunta. Hay una condición de punto de entrada. Lo he implementado a través de variables estáticas, para que no se ponga a cero con cada tick. Pues bien, en algunos lugares del gráfico el robot dibuja un punto de entrada donde no hay niveles horizontales y, por tanto, su intersección con la MA. Por favor, ejecute el código en su probador y verá el problema. En el EURUSD. ¿Quizás este problema deba ser implementado de una manera diferente? No soy un profesional de la programación.

Es decir, el patrón ha aparecido, se han dibujado los niveles y el robot espera tres cruces de uno de los niveles.

¿Qué te parece?

¿Quién lo necesita, si no te importa que lo diga? Mira de dónde saca los valores el robot y encontrarás otra solución al problema.

 

La ayuda 2 da errores. He resaltado los errores en rojo, ¡ayuda PLZ!



//+------------------------------------------------------------------+

//| Trailing Stop de Asyll.mq4 ||

//| Copyright 2017, MetaQuotes Software Corp.

//| https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Alibek Asyll"

#enlace de propiedad "https://www.mql4you.com"


extern int TralType = 0; // 0-Sar, 1-ATR, 2-HMA.

extern double SAR_Step = 0.02;

extern double SAR_Max = 0.2;

extern int ATR_Period = 14;

extern double ATR_K = 2.0;

extern inttern MMA_Period = 16;

extern int MMA_Método = 3;

extern inttern MMA_Shift = 0;

datetime LBT;

//+------------------------------------------------------------------+

//| Función de inicialización de expertos |

//+------------------------------------------------------------------+

int init()

{

//---

//---

return(0);

}

//+------------------------------------------------------------------+

//| Función de desinicialización experta |

//+------------------------------------------------------------------+

int deinit()

{

//---

return(0);

}

//+------------------------------------------------------------------+

//| función de tic experto |

//+------------------------------------------------------------------+

int inicio()


{

bool error = false;

if (LBT!=Time[0] {

if (OrdersTotal()>0) {

for (int i=o; i<TotalPedidos(); i++) {

if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()<2) {

double SL = OrderStopLoss();

si (OrderType()==0) {

switch (TralType) {

caso 0: SL = iSAR(NULL,0,SAR_Step, SAR_Max,0);

romper;

caso 1: SL = High[1] - iATR(NULL,0,ATR_Period,1)*ATR_K;

romper;

caso 2: SL = iCustom(NULL,0, "VininI_HMA_sound&amp",HMA_Period, HMA_Method, 3, HMA_Shift,false,false,",1,0,0);

romper;

}

si (SL<OrderStopLoss())

SL = OrderStopLoss();

}

si (OrderType()==1){

switch (TralType){

caso 0: SL = iSAR(NUll,0,SAR_Step, SAR_Max,0);

romper;

caso 1: SL = Low[1] + iATR(NULL,0,ATR_Period,1)*ATR_K;

romper;

caso 2: SL = iCustom(NULL,0, "VininI_HMA_sound&amp",HMA_Period, HMA_Method, 2, HMA_Shift,false,false,",1,0,0);

romper;

}

si (SL>OrderStopLoss())

SL = OrderStopLoss();

}

si (SL!=OrderStopLoss()) {

if (!OrderModify(OrderTicket(),OrderOpenPrice(),OrderTakeProfit(),0))

error = true;

}

}

si (!error)

LBT = Tiempo[0];

}


return();

}

//+-------------------------------------------------------------------+

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
Выберите подходящую торговую стратегию и оформите подписку на нее в пару кликов. Все Сигналы сопровождаются подробной статистикой и графиками. Станьте Поставщиком торговых сигналов и продавайте подписку тысячам трейдеров по всему миру. Наш сервис позволит вам хорошо зарабатывать на прибыльной стратегии даже при небольшом стартовом капитале...
 
Asyll:¡La ayuda dos da errores! Los errores resaltados en rojo, ¡ayuda PLZ!

Tiene sentido utilizar el botón SRC para insertar el código. Informar del texto de los errores. Elimina el texto para acelerar al experto:

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int init()

  {

//---

   

//---

   return(0);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

int deinit()

  {

//---

   return(0);

  }

Se necesita tiempo para llamar a estas funciones, y están vacías. Y sería más fácil trabajar con el texto del programa sin ellos. Cuente los corchetes. Para facilitar esta tarea, pruebe el Styler en el menú Herramientas. Descarta las líneas vacías.

Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Данная функция предназначена для оформления исходного кода в соответствии с рекомендуемым стандартом. Это позволяет сделать код более читаемым, выглядящем профессионально. Грамотно оформленный код гораздо проще анализировать в последующем как его автору, так и другим пользователям. Для того чтобы запустить стилизатор, необходимо выполнить...
 

Buenos días a todos.

Tengo una idea simple que estoy tratando de codificar y probar en un probador MT-4

Abrir órdenes cuando se den las siguientes condiciones al mismo tiempo

1. Al abrir una vela de un minuto

2 Al precio que quiero

3. En la fecha deseada

4.El valor del precio debe coincidir estrictamente con el valor del día.

Por ejemplo, el día 27 fue una vela de un minuto con el precio de apertura 1,2414

Necesito abrir una orden 1) en la vela abierta 2) en 1.2414 3) pero en el siguiente día que sigue después del 27

Por ejemplo, el día 28 tuvimos una vela de 1 minuto abierta a 1,2438.

Necesito abrir una orden 1) en la vela abierta 2) a 1,2438 3) PERO AL DÍA SIGUIENTE DEL 28

Por ejemplo, el día 12 hubo una vela de 1 minuto abierta a 1,2451

Necesito abrir una orden 1) en la vela abierta 2) a 1,2451 3) PERO AL DÍA SIGUIENTE DE LA 12ª.


Para la realización de esta idea empecé a estudiar un tema de arrays y creé dos arrays unidimensionales, pero no funciona

Te agradecería mucho si pudieras arreglar mi código para implementar la idea anterior

Soy lento en el aprendizaje, así que te agradeceré mucho que escribas el código correcto, en lugar de explicarlo con palabras.

Así lo entenderé mucho más rápido.

Aquí está mi código.

double mass[3]=
{
1.2414,
1.2438,
1.2451
};
int mass1[3]=
{
27,
28,
12
};
double value = NormalizeDouble( Bid,4) ;
double S = ArrayBsearch(mass,  value,  WHOLE_ARRAY,  0, MODE_ASCEND);
int value1 = Day() ;
int S1 = ArrayBsearch(mass1,  value1, WHOLE_ARRAY,  0, MODE_ASCEND);

if(Bid  == iOpen(NULL,PERIOD_M1,0))
if(Day()!= S1)
if(NormalizeDouble ( Bid,4)== S)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,"jfh",123 );
}
 

Hola! Este código pretende mover los niveles de señal cuando el precio se mueve más allá del nivel superior o inferior, pero no sucede. Por favor, dígame cuál es el error.

/-------------------------выход цены за пределы сигнальных уровней-----------------------------------------------------------------------------------------------
if(Bid>=priceA){                                                                                   //если цена вышла за верхнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll();
 OR=0;                                                                                             //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 }                                                                                                 
if(Bid<=priceB){                                                                                   //если цена вышла за нижнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll();
 OR=0;                                                                                             //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 } 
 //----------------------------------------------------------------------------------------------------------------------------------------------------------------
 price=iHigh(Symbol(),PERIOD_M15,0);                                                               //Сигнальный уровень О(Сердцевина)
ObjectCreate("UrO",OBJ_HLINE,0,0,price);
ObjectSet("UrO",OBJPROP_COLOR,clrYellowGreen);                               
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
 priceA=price+30*Point;                                                                            //Сигнальный уровень А(Максимум)
ObjectCreate("UrA",OBJ_HLINE,0,0,priceA);
ObjectSet("UrA",OBJPROP_COLOR,clrDarkSlateBlue); 
//---------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 priceB=price-30*Point;                                                                            //Сигнальный уровень B(Минимум)
ObjectCreate("UrB",OBJ_HLINE,0,0,priceB); 
ObjectSet("UrB",OBJPROP_COLOR,clrOrangeRed); 
 
ANDREY: Por ejemplo, el día 27 hubo una vela de un minuto con el precio de apertura 1,2414

Necesito abrir una orden 1) en la apertura de una vela 2) a 1,2414 3) PERO EL ÚLTIMO DÍA DESPUÉS DEL 27

Aquí está mi código.

En primer lugar, no es razonable normalizar un BID ya normalizado, a menos que el instructor le diga que lo haga

En segundo lugar, ¿qué obtenemos? El día 27, el precio apareció y usted introdujo urgentemente los datos en la matriz, para activarlos el día 28? ¿Y si el día 28 ocurre algo urgente? Estás poniendo datos en un array que es difícil de calcular. Sus datos deben ser computables. Le sugiero que depure su EA por pasos. 1) Determinar el precio requerido y mostrarlo mediante la función Alert(). Si está seguro de que es correcto, calcule y muestre el siguiente... y así hasta el final. Es demasiado pronto para escribir todo el código de antemano, ya que habrá que modificarlo a medida que avance la depuración. ¿Cómo se ve esta tecnología de simple a compleja?

 
vikzip: El código fue escrito para mover los niveles de señal cuando el precio se mueve más allá del nivel superior o inferior, pero esto no sucede

Veamos lo que está escrito aquí. En primer lugar, las líneas deben ser más cortas. Se ajustarán mejor a la pantalla y el compilador trabajará más rápido.

/-------------------------выход цены за пределы сигнальных уровней-------------------------------------------------
if(Bid>=priceA){                  //если цена вышла за верхнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll();
 OR=0;                            //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 }
if(Bid<=priceB){                  //если цена вышла за нижнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll();
 OR=0;                            //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 } 
 //----------------------------------------------------------------------------------------------------------------
Si el BID es mayor, hay que hacer algo. Entonces, si el BID es menor, hay que hacer lo mismo. Se puede formular de forma más breve: si el precio es más o menos...
Escribes algo en los comentarios sobre mover algo, pero lo único que haces es borrar todos los objetos. Sus 10 líneas se sustituyen por cuatro.
if((Bid>=priceA) ||(Bid<=priceB)){     //если цена вышла за одну из ГРАНИЦ, то удалить все объекты и очистить признак поиска
   ObjectsDeleteAll();
   OR=0;                               // А это для чего?????????????????
} 

Pero !!! El signo OR debería usarse en otro lugar, ¿no? Parece que en lugar de poner a cero este O, deberíamos crear nuevos objetos aquí. O incluso más fácil - en lugar de borrar objetos, sólo muévelos a una nueva ubicación - son sólo 3 líneas de código. ¿O el instructor exige más?

if((Bid>=priceA) ||(Bid<=priceB)){     //если цена вышла за одну из ГРАНИЦ, сдвинуть уровни
  ObjectSet("UrO",OBJPROP_PRICE1,iHigh(Symbol(),PERIOD_M15,0));   // Так что ли???
   Objectsset( аналогично)
   Objectsset(     )
}
¿De simple a falso o viceversa?
 
STARIJ:

En primer lugar, normalizar un BID ya normalizado es poco recomendable, a no ser que el profesor te lo indique

En segundo lugar, ¿qué tenemos aquí? ¿El día 27 se produce un precio y se introducen urgentemente los datos en la matriz, para que funcione el día 28? ¿Y si hay una situación urgente el día 28? Estás poniendo datos en un array que es difícil de calcular. Sus datos deben ser computables. Le sugiero que depure su EA por pasos. 1) Determinar el precio requerido y mostrarlo mediante la función Alert(). Si está seguro de que es correcto, calcule y muestre el siguiente... y así hasta el final. Es demasiado pronto para escribir todo el código de antemano, ya que habrá que modificarlo a medida que avance la depuración. ¿Qué opina de esta tecnología de lo simple a lo complejo?

Muchas gracias por la pista.

Pero me parece que en tu razonamiento estás asumiendo que estoy tratando de escribir un EA VERDADERO.

Siento no haberte dicho que no es así.

Trato de probar la presencia de alguna regularidad, la correlación entre los parámetros anteriores, es decir, para confirmar o rechazar la idea, que puede ser la base de un Asesor Experto TORKING.

Por lo tanto, le agradeceré que corrija mi código, para que todo esté de acuerdo con mi idea anterior.

Y sus comentarios, por supuesto, me serán útiles cuando esté escribiendo un Asesor Experto en comercio.

Gracias

 
ANDREY:

Muchas gracias por el consejo.

Pero tal y como yo lo veo, tu razonamiento se basa en el hecho de que estoy tratando de escribir un verdadero EA.

Siento no haberte dicho que no es así.

Trato de probar la presencia de alguna regularidad, la correlación entre los parámetros anteriores, es decir, para confirmar o rechazar la idea, que puede ser la base de un Asesor Experto TORKING.

Por lo tanto, le agradeceré que corrija mi código, para que todo esté de acuerdo con mi idea anterior.

Por supuesto, sus comentarios me serán útiles cuando escriba un Asesor Experto en comercio.

Gracias

Perdón por la intromisión. Pero... ¿En qué sentido la lógica de trazado de líneas debería ser diferente para un EA de comercio y uno de no comercio?

Cuando estás en el trabajo, ¿miras el reloj en tu mano de forma diferente a como lo miras en casa?