[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 361

 
vilard:
¿cómo hacer que los indicadores de diferentes plazos se tengan en cuenta en el probador, y es esto incluso posible?
¿Qué significa considerar un indicador en el Probador de Estrategias? (1) ¿Tal vez el indicador de otro marco temporal debería aparecer durante la visualización, o (2) en el código del EA, en la función del indicador debería calcular un valor para otro marco temporal?
 
vilard:
¿cómo hacer que los indicadores de diferentes plazos se tengan en cuenta en el probador, y es esto incluso posible?

posible: https://docs.mql4.com/ru/indicators/icustom

https://docs.mql4.com/ru/constants/timeframes

 

El EA está diseñado para generar señales en barras con índice 1 y 2 (es decir, órdenes de apertura y cierre en la apertura de una nueva barra).

En el probador, genera alternativamente los errores 138 y 4051 (parece que jura el ticket) para OrderClose.

Por favor, ayúdenme a resolver este problema.

   if(Mas_Ord_New[0][0]!=0)
    {
     if(Signal==2)
      {
        for(i=0; i<=Mas_Ord_New[0][0]; i++)
         {
           ticket=Mas_Ord_New[i][4];
           lts=Mas_Ord_New[i][5];
           Ans=OrderClose(ticket,lts,Bid,5);
           if(Ans==false) 
           Alert("Закрыть BUY ",ticket, " не удалось. Ошибка: ", GetLastError());
         }
      }
     if(Signal==3)
      {
        for(i=0; i<=Mas_Ord_New[0][0]; i++)
         {
           ticket=Mas_Ord_New[i][4];
           lts=Mas_Ord_New[i][5];            
           Ans=OrderClose(ticket,lts,Ask,5);
           if(Ans==false) 
            Alert("Закрыть SELL ",ticket, " не удалось. Ошибка: ", GetLastError());
         }       
      }
    }

 // Функция из учебника

int Terminal()
 {
   int Qnt=0;
   
   ArrayCopy(Mas_Ord_Old, Mas_Ord_New); // Сохранение информации
   Qnt=0; // Обнуление счетчика
   ArrayInitialize(Mas_Ord_New,0);  // Обнуление массива
   ArrayInitialize(Mas_Tip,0);  // Обнуление массива
   
   for (int n=0; n<=OrdersTotal(); n++)
    {
      if ((OrderSelect(n,SELECT_BY_POS)==true) &&
          (OrderSymbol()==Symbol()) && (OrderMagicNumber()==Magic))
       {
         Qnt++;
         Mas_Ord_New[Qnt][1]=OrderOpenPrice();
         Mas_Ord_New[Qnt][2]=OrderStopLoss();
         Mas_Ord_New[Qnt][3]=OrderTakeProfit();
         Mas_Ord_New[Qnt][4]=OrderTicket();
         Mas_Ord_New[Qnt][5]=OrderLots();
         Mas_Tip[OrderType()]++;
         Mas_Ord_New[Qnt][6]=OrderType();
         Mas_Ord_New[Qnt][7]=OrderMagicNumber();
         if (OrderComment()=="")
            Mas_Ord_New[Qnt][8]=0;
         else
            Mas_Ord_New[Qnt][8]=1;
       }
    }
   Mas_Ord_New[0][0]=Qnt;
   return;
 }
 
silhouette:

El EA está diseñado para generar señales en barras con índice 1 y 2 (es decir, órdenes de apertura y cierre cuando se abre una nueva barra).

En el probador, genera alternativamente los errores 138 y 4051 (parece que jura el ticket) para OrderClose.

Por favor, ayúdenos a resolver este problema.

Prueba la siguiente construcción para cerrar la posición:

int err;
// ---
if (...) // условие закрытия позиции
{  if (OrdersTotal()>0)
   {  for (int i=OrdersTotal()-1; i>=0; i--)
      {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {  // фильтрация позиции по текущему символу:
            if (OrderSymbol()!=Symbol()) continue;
            // фильтрация позиции по магик-номеру:
            if (OrderMagicNumber()!=MagNum) continue;
            // ... можно и другие фильтры поставить.
            // --- закрытие позиции Buy.
            if (OrderType()==OP_BUY)
            // перед открытием или закрытием позиции
            // обновляйте котировки с помощью RefreshRates()
            // дабы избежать устаревание запрошенной цены,
            // возможной причины ошибки 138
            {  RefreshRates(); 
               OrderClose(OrderTicket(),OrderLots(),Bid,30);
               err=GetLastError();
               if (err>0)  Alert("Ошибка при закрытии позиции Buy (",err,").");
               if (err==0) Alert("Позиция Buy закрыта успешно.");
               err=0; return(0);
            }
            // --- закрытие позиции Sell.
      else  if (OrderType()==OP_SELL)
            {  RefreshRates();
               OrderClose(OrderTicket(),OrderLots(),Ask,30);
               err=GetLastError();
               if (err>0)  Alert("Ошибка при закрытии позиции Sell (",err,").");
               if (err==0) Alert("Позиция Sell закрыта успешно.");
               err=0; return(0);
            }
   }  }  }
}
 
chief2000:
USDJPY


gracias
 
Roman.:


0,01 - Cuenta de céntimos NDD. TR y SL = 0.

Todo es igual en todas partes.

En la 4ª - en los pares de divisas - sin duda todo se prueba de acuerdo con el algoritmo.

En Alpes - oro - probado según el algoritmo.

Me gustaría añadir metales a mi GRAAL, que funciona en 4ª, hasta ahora sólo en monedas.


Entonces, ¿no hay ningún problema con las divisas?
 
Vinin:

Entonces, ¿no hay problemas con las divisas?


Sí, no hay problemas.

Victor Ivanovich, gracias de todo corazón, me he dado cuenta de sus preguntas orientadoras.

No hay metales, sólo monedas en la NDD en 4, por eso el error #131 es arrojado durante las pruebas - volumen equivocado. No lo sabía.

En cuanto al oro y la plata, ya he empezado a optimizar los parámetros en Alps.

 
paladin80:

Para cerrar una posición, intente esta construcción:


Gracias, ¡funciona!
 

¿Podríais decirme cómo insertar el código HTML de un banner, por ejemplo?

 
¿Dónde se pone?