Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 61

 
Renat Akhtyamov:
Espero que haya un valor asignado a la variable Percent en OnInit().
La variable Porcentaje es definida por el usuario. He eliminado OnInit().
 
Michail_David:
Mi variable Porcentaje está definida por el usuario. OnInit() lo he dejado.
Si Lots=0, el probador no abrirá nada
 
Renat Akhtyamov:
si Lots=0, el probador no abrirá nada
Tengo muchos calculados en relación al Porcentaje. El probador calcula el número de lotes, pero no las operaciones.

 Margin_Percent=AccountFreeMargin()*Percent/100; 

Lots=Margin_Percent/MarketInfo(Symbol(),MODE_MARGINREQUIRED);

      Lots_Volume=(MathFloor(Lots)+MarketInfo(Symbol(),MODE_LOTSTEP));

if(Lots>Lots_Volume)
        {
         Lots=Lots_Volume;
        }
      else if(Lots<Lots_Volume)
         Lots=MathFloor(Lots);
      Print("Количество лотов : ",Lots);
      return;
 
Michail_David:
Tengo muchos calculados en relación al Porcentaje. El probador calcula el número de lotes, pero no hay operaciones.

Y aún así, en qué parte del código se establece Porcentaje

¿y qué hace el siguiente comando print("Lotes : ",Lotes); ?

 
Renat Akhtyamov:

Sin embargo, ¿en qué parte del código está Percent

y ¿qué hace el siguiente comando print("Número de lotes : ",Lotes); ?

#property link      ""
#property version   "1.00"
#property strict
//--- input parameters
input int      Percent=50;
input int      Fast_EMA_Period=12;
input int      Slow_EMA_Period=25;
input int      Signal_Period=9;
input double   Step_PSAR=0.02;
input double   Maximum_PSAR=0.2;
input int      MAGICNUMBER=413;
static datetime New_Time;// Время текущего бара
double Margin_Percent;  //Используемые средства для открытия ордеров
double Lots;//Определение общего количества лотов
double Lots_Volume;
double MacdCurrent;//Параметры MACD основной линии текущего бара
double MacdPrevious1;//Параметры MACD основной линии предыдущего бара
double MacdPrevious2;//Параметры MACD основной линии со смещением на 2 бара
double StopLoss;//Параметры Трейлинг стоп по параметрам ParabolicSAR текущего бара
double Previous_StopLoss;//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
double CurrentPSAR;//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

   bool New_Bar=false;                    // Флаг нового бара
   int ticket,total,cnt;
//---------------------------------------------------------------------------
   New_Time=TimeCurrent();
   if(Time[0]==New_Time) // Сравниваем время
      New_Bar=true;      // Поймался новый бар
   else if(New_Bar==false) // Если бар не новый..
La quinta línea especifica el Porcentaje. El registro imprime: "Cantidad de lotes: 90,0100000001". ¿Tal vez deberíamos añadir NormalizeDouble()?
 
Michail_David:
En la quinta línea se establece Percent. El registro muestra: "El número de lotes es 90.0100000001". ¿Tal vez deberíamos añadir NormalizeDouble()?

No hay nada malo en el lote.

Busque un error en la lógica de apertura del pedido.

En estos casos, suelo establecer una condición explícita que abrirá la orden

 
Renat Akhtyamov:

No hay nada malo en el lote.

Busque un error en la lógica de apertura de la orden.

En estos casos suelo establecer una condición explícita para que la orden se abra

Por favor, danos un ejemplo con una condición explícita. Si he entendido bien, debería haber una condición en el bucle para abrir. ¿Es esto correcto?
 
Michail_David:
Por favor, ponga un ejemplo con una condición explícita. Si he entendido bien, debería haber una condición en el bucle para la apertura. ¿Verdad?
Dé un comando para abrir una orden al principio del código, justo después del cálculo del lote y asegúrese de que el probador funciona correctamente. Entonces puedes volver a poner todo en su sitio.
 
Renat Akhtyamov:
Dé una orden para abrir una orden al principio del código, justo después de calcular el lote, y asegúrese de que el probador funciona correctamente. Luego puedes volver a colocar todo en su sitio.
Gracias. He encontrado un error. Tuve que volver; después del cálculo de los lotes. Por eso los lotes no se abrieron
 
Michail_David:
La quinta línea especifica el Porcentaje. El registro muestra: "Número de lotes 90.0100000001". ¿Tal vez deberíamos añadir NormalizeDouble()?
Sí, deberías. Y no sólo los lotes, sino todos los demás valores que se pasan al servidor. Los lotes también son útiles para comprobar el mínimo y el máximo permitido en el valor de la cuenta, también en el cambio de paso, hubo casos en los que el lote se puede cambiar en incrementos de 0,03, por lo que 90,01 no funcionará, al menos sobreescrito.