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

 
Abrir[1] Cerrar[1]
 

Saldo 600-1199 lote 0,1

Saldo 1200-1799 lote 0,2

Saldo 1800-2399 lote 0,3 etc.

¿Cómo organizarse en la EA? Gracias.

 
Maniac:

Saldo 600-1199 lote 0,1

Saldo 1200-1799 lote 0,2

Saldo 1800-2399 lote 0,3 etc.

¿Cómo organizarse en la EA? Gracias.

double Lot()
{
   double balance=AccountBalance();
   if (balance>600 && balance<1199) return(0.1);
   if (balance>1200 && balance<1799) return(0.2);
   if (balance>1800 && balance<2399) return(0.3);
return(MarketInfo(Symbol(), MODE_MINLOT));
}
 

llamada: ticket=OrderSend(Symbol(),OP_BUY,Lot(),Ask,3,Bid-25*Point,Ask+25*Point, "My order #",magic,0,CLR_NONE);
 
IgorM:

Llamada: ticket=OrderSend(Symbol(),OP_BUY,Lot(),Ask,3,Bid-25*Point,Ask+25*Point, "My order #",magic,0,CLR_NONE);

Al mismo tiempo, el balance puede estar en las nubes, y la equidad puede estar en un gran descenso. Por lo tanto, el tamaño del lote puede parecer más grande de lo que se puede abrir y toda la estructura se irá por la borda...

Antes de abrir es mejor corregir el lote para que sea realmente posible.

Hice una función para este propósito. Fue ligeramente corregido por Viktor(Vinin) - pruébalo:

// ===========================================================================
// --- Функция рассчёта величины лота для открытия позиции. Редакция VininI---
// Если лот превышает возможный для открытия позы, то он корректируется 
// ===========================================================================

double CorrectLots(double lt)
{
   double ltcorr;
   double pnt =      MarketInfo(Symbol(),MODE_POINT);
   double mspr =     MarketInfo(Symbol(),MODE_SPREAD);
   double dig =      MarketInfo(Symbol(),MODE_DIGITS);
   double MaxLot =   MarketInfo(Symbol(),MODE_MAXLOT);
   double MinLot =   MarketInfo(Symbol(),MODE_MINLOT);
   double StpLot =   MarketInfo(Symbol(),MODE_LOTSTEP);
   double OneLot =   MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double TradeMrg = NormalizeDouble(AccountFreeMargin()/4.0,dig);    // Свободные средства, разрешенные к торговле
   
   
   double Money=lt*OneLot+mspr*pnt;          // Вычисляем стоимость открываемой позы
   if (Money>=TradeMrg)                      // Если цена позиции равна или больше, чем есть свободных средств, то ...
      {
         lt=MathFloor(TradeMrg/OneLot/StpLot)*StpLot;  // ... рассчитаем допустимый лот
         Print("Func CorrectLots: полученный лот ",lt," скорректирован под допустимый ",lt); 
      }
      else 
         Print("Func CorrectLots: лот вернули без изменений");
   lt=MathMin(MaxLot, MathMax(MinLot, lt)); // Проверим превышение допустимых ...
   
   return(lt);                            
}

En la línea.

double TradeMrg = NormalizeDouble(AccountFreeMargin()/4.0,dig);    // Свободные средства, разрешенные к торговле

... El margen libre se divide por cuatro y sólo una cuarta parte de los fondos libres se considera apta para la negociación.

Puedes quitar la división por 4 y poner todo lo que quieras, incluso usar todo el margen.

Pero la función no le permitirá utilizar un tamaño de lote mayor al permitido.

 
artmedia70:
Al mismo tiempo, el balance puede estar en las nubes, mientras que la equidad está en la gran reducción. Respectivamente, el tamaño del lote puede parecer más grande de lo que se puede abrir y toda la estructura se irá por la borda...


¿Por qué todo es tan triste...

el último return() en mi función dará el lote mínimo disponible para el instrumento. Si la cuenta es de centavos con un gran apalancamiento, entonces cuando el saldo es inferior a 600, el Asesor Experto puede operar algún tiempo más :)

SZZY: el problema es específico y la rama es para orientar al que pregunta.

 
IgorM:


por qué es tan triste...

el último return() en mi función dará el lote mínimo disponible para el instrumento. Si la cuenta es de centavos con un gran apalancamiento, entonces cuando el saldo es inferior a 600, el Asesor Experto puede operar algún tiempo más :)

SZZY: El problema es específico, y la rama para dar la dirección a la persona que pregunta

Bueno, perdóname generosamente... :) No se enfade, señor... :)

Aquí hay una función en mi versión:

// ==========================================================================
// ------------ Функция рассчёта величины лота для открытия позиции ---------
// Если лот превышает возможный для открытия позы, то он корректируется 
// ==========================================================================

double CorrectLots(double lt)
{
   double ltcorr;
   double pnt =      MarketInfo(Symbol(),MODE_POINT);
   double mspr =     MarketInfo(Symbol(),MODE_SPREAD);
   double dig =      MarketInfo(Symbol(),MODE_DIGITS);
   double MaxLot =   MarketInfo(Symbol(),MODE_MAXLOT);
   double MinLot =   MarketInfo(Symbol(),MODE_MINLOT);
   double StpLot =   MarketInfo(Symbol(),MODE_LOTSTEP);
   double OneLot =   MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double TradeMrg = NormalizeDouble(AccountFreeMargin()/4.0,dig);      // Свободные средства, разрешенные к торговле
   
   lt=MathAbs(lt);
   ltcorr=lt;                       // Зададим начальное значением ltcorr равным значению lt
   
   if (lt>=MaxLot) ltcorr=MaxLot;   // Проверим превышение допустимых ...
   if (lt<=MinLot) ltcorr=MinLot;   // ... значений лота
   
   double Money=lt*OneLot+mspr*pnt; // Вычисляем стоимость открываемой позы

   if (Money<TradeMrg)              // Если свободных средств больше, чем цена позиции - 
      {
         return(ltcorr);            // ... возвращаем неизменённый лот
      }
   else if (Money>=TradeMrg)        // Если цена позиции равна или больше, чем есть свободных средств, то ...
      {
         ltcorr=MathAbs(MathFloor(TradeMrg/OneLot/StpLot)*StpLot);       // ... рассчитаем допустимый лот
         double MoneyCorr=ltcorr*OneLot+mspr*pnt;                      
         Print("Func CorrectLots: лот ",lt," скорректирован до ",ltcorr,
               " Стоимость позы до корректировки = ",Money,
               " Стоимость позы после корректировки = ",MoneyCorr
               ); 
         return(ltcorr);                                                 // ... и вернём его значение
      }
   Print("Func CorrectLots: лот вернули без изменений");
   return(ltcorr);                                                       // Возврат изначального лота в непредусмотренных случаях с сообщением
}
 
IgorM:


¿Por qué es tan triste...

el último return() en mi función dará el lote mínimo disponible para el instrumento. Si la cuenta es de centavos con un gran apalancamiento, entonces cuando el saldo es inferior a 600, el Asesor Experto puede operar algún tiempo más :)

SZZY: el problema es específico, y la rama para dar dirección a la persona que pregunta

Verás, Igor, el hombre te hizo una pregunta, le diste la respuesta correcta, y puedes olvidarte de ello. Pero bailar en la balanza no es bueno. Por la misma razón que el balance puede estar en el cielo, y la situación real - es el momento de ahorrar. Y aquí estamos, hr-r-r-r-ing... ...y un gran lote encima del pedido... y está abajo... La equidad, también, aunque ya es
ya está ahí... Así que te dije que sería mejor confiar en la equidad en lugar del equilibrio... :)

 

¡Buenos días!

¿Puede usted por favor aconsejar a un novato, es posible escribirun indicador personalizado en MQL4 , por lo que puede manejar simultáneamente todos los pares de divisas? Según tengo entendido, el número máximo de líneas en un gráfico de indicadores es de 8, pero yo sólo necesito una línea. Es decir, ¿puedo obtener una matriz de matrices o variables para todos los pares de divisas simultáneamente para esta línea?

Gracias de antemano por la respuesta.

 
Igor_Sev:

Es decir, ¿puedo obtener un array para esta línea procesada de arrays o variables en todos los pares de divisas al mismo tiempo?


En teoría, no veo ningún obstáculo. Otra cuestión es si se puede procesar específicamente esta matriz.
 
Roger:

En teoría, no veo ningún obstáculo. Otra cuestión es si podrá procesar esta matriz.


¿Cómo puedo abordar todos los pares de divisas en el código del programa al escribir una herramienta? He mirado los ejemplos de escritura de una herramienta, no hay ninguna referencia a un par de divisas, la que está vinculada a un gráfico de cotización específico se procesa por defecto.

El caso es que ahora Excel y VBA lo hacen todo, obtengo información de 22 pares de divisas a través del servidor DDE y al utilizar el código VBA me refiero al procesamiento simultáneo, pero no es conveniente, porque en primer lugar tengo que esperar 2 horas a que se acumule el historial de datos para realizar el análisis mediante los gráficos de Excel. Y no es conveniente saltar de un programa a otro, por eso pienso cómo transferirlo todo a MT4.

Razón de la queja: