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

 
Valeriy Yastremskiy:

La lógica es floja, todo está ahí, tanto las matrices de los billetes como los tipos de pedidos. Sólo que no se llena cuando se abren las órdenes, y el array se pone a cero en la función TicketLimit por alguna razón. A primera vista, eso parece.

¿En qué se parece al ajedrez? Nos falta un movimiento. Intentaré analizarlo. Gracias, Valery.

 

¿Cómo puedo hacer que las estadísticas de la barra sean correctas?

Lo he hecho, cuenta el número correctamente, pero cuando intento utilizar los datos me sale "0"

//---
   int i,limit;
   datetime Start=0;
   if((rates_total-prev_calculated-1)<=0)return(0);
   limit=rates_total-prev_calculated-1;
   for(i=limit; i>=0; i--) 
     {
      Label1Buffer[i]=open[i];
      Label2Buffer[i]=close[i];
      if(Start!=time[i])
        {
         a+=1;                                        // кол-во баров
         if(Label1Buffer[i] <Label2Buffer[i]) u+=1;   // восходящие бары
         if(Label1Buffer[i] >Label2Buffer[i]) d+=1;   // нисходящие бары
         if(Label1Buffer[i]==Label2Buffer[i]) b+=1;   // Дожи
         Start=time[i];
        }
      if(Start==time[i]&&a<=limit)
        {
         Print(i," / ",u," / ",d," / ",b," / ",a," / ",limit);//
        }
      if(a==limit) 
        {
         ObjectCreate(0,"STAT1",OBJ_TEXT,0,time[0],high[0]+750*Point);
         ObjectSetText("STAT1",d,8,"Arial",clrBlack);
         ObjectCreate(0,"STAT2",OBJ_TEXT,0,time[0],low[0]-250*Point);
         ObjectSetText("STAT2",u,8,"Arial",clrBlack);
         Print(d/u);
        }
     }
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 0
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 1 / 3041 / 2971 / 41 / 6053 / 6053
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 2 / 3041 / 2970 / 41 / 6052 / 6053
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 3 / 3041 / 2969 / 41 / 6051 / 6053
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 4 / 3041 / 2968 / 41 / 6050 / 6053
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 5 / 3041 / 2967 / 41 / 6049 / 6053
2021.08.11 17:09:46.884 StatisticsADR EURUSD,Daily: 6 / 3041 / 2966 / 41 / 6048 / 6053

Tal vez haya una forma normal, pero yo "reinvento la rueda")

Por favor, avisa.

 
MakarFX:

¿Cómo hago para que las estadísticas de la barra sean correctas?

Lo he hecho, cuenta el número correctamente, pero cuando intento utilizar los datos me sale "0"

Quizás haya una forma normal, pero yo "reinvento la rueda")

Por favor, avisa.

Parece que tienes todas las variables int y el resultado de la división es menor que 0. Por lo tanto, 0;

Pruébalo:

Print((double)d/u);
 
Galim_V:

¿Como en el ajedrez? Falta un movimiento. Intentaré darle sentido. Gracias, Valery.

в глобальной области
int ind=0, Ind=0;
......

 if(ParSar>MaxClose&&chekt==1){

    ticket=_OrderSend(NULL,OP_BUYSTOP,0.01,MaxClose+(spread*Point()),0);
ind++;
_Tacket[ind]=ticket; Ind=ind;
  }
    }
    if(MinClose!=0){
   if(ParSar<MinClose&&chekt==1){
    _price= NormalizeDouble( MinClose-(spread*Point()),Digits);
    ticket=_OrderSend(NULL,OP_SELLSTOP,0.01,_price,0);
ind++;
_Tacket[ind]=ticket; Ind=ind;
........

for(i=Ind,i<1,Ind--) // вместо Ind OrderTotal правильнее, если есть и другие ордера в терминале
{OrderSelect( _Tacket[i], SELECT_BY_TICKET )
проверки и действия
}
// Здесь запомнить тикет в массив _тикет и тип ордера тоже и запомнить последний индекс массива!!!

 //А потом в Ордер селект подставлять значение массива _тикет) Цикл по индексу массива _тикет от 1 до последнего индекса.
 
Mihail Matkovskij:

Parece que tienes todas las variables int y el resultado de la división es menor que 0. Por lo tanto, 0;

Pruébalo:

Gracias.
 
Gracias de nuevo por toda su ayuda en mi proyecto anterior.

Aquí hay otra idea para el próximo EA, tal vez alguien ya está familiarizado con la estrategia ORBO (open Range Brake out)?

 

¿Pueden decirme si existe una función que simplifique esta definición para abrir un pedido?

if(Bid < OpenPrice && Bid > OpenPrice-10*Point)
if(Ask > OpenPrice && Ask < OpenPrice+10*Point)
La idea es que no se abra una orden si el precio no está dentro de este rango
 
MakarFX:

¿Pueden decirme si existe una función que simplifique esta definición para abrir un pedido?

La idea es que no se abra una orden si el precio no entra en este rango

Dibújalo en el papel.

OpenPrice _________________________

Oferta _________________________

OpenPrice-10*_Point________________________


En la imagen se puede ver que OpenPrice - Bid no debe ser superior a 10*_Point

 
Alexey Viktorov:

Pues dibujarla en papel.

OpenPrice _________________________

Oferta _________________________

OpenPrice-10*_Point________________________


En la imagen se puede ver que OpenPrice - Bid no debe ser más de 10*_Point

diferencia de módulos. Sin el módulo, sólo la zona superior entra en la condición. | OpenPrice - Bid |> 10*_Point opening condition

 
Alexey Viktorov:

Pues dibujarla en papel.

OpenPrice _________________________

Oferta _________________________

OpenPrice-10*_Point________________________


En la imagen se puede ver que OpenPrice - Bid no debe ser superior a 10*_Point

Me sorprendes.


Razón de la queja: