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

 
Movlat Baghiyev:
La condición de cierre utiliza una señal inversa, pero no funciona yNuestras operaciones sólo se cierran en el stop o en el takei ¿Cuál es su razón?

No es así.
Su condición debe ser al inicio y la función de cierre después del inicio.

int i;
// 
void Start(){

if ((FMA1<GrossMA1 && FMA2>GrossMA2 && Bid<FMA1-Distanse*GetPoint()) // тут так надо бы Bid<NormalizeDouble(FMA1-Distanse*GetPoint(),Digits)
   || (FRMA1>GrossMA1 && FRMA2<GrossMA2  &&  Ask>FRMA1+Distanse*GetPoint())){
for(i=OrdersTotal()-1;i>=0;i--) if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL)  CloseOpBuySell(); // тут закроются все ордера и бай и селл
    }
  }

}// end start

void CloseOpBuySell()

for(i=0;i<OrdersTotal();i++) 
  { 
  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
   { 
    if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic ) //свой магик
    { 
      if(OrderType()==OP_BUY
        { 
         if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),3,LawnGreen);  {continue;}
        } 
      if(OrderType()==OP_SELL
        { 
         if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),3,LawnGreen);  {continue;}
        } 
      } 
    } 
  } 
  return;
  }

Si tiene que cerrar en condiciones separadas, y no todas a la vez, entonces la función de cierre debe ser diferente.
 
Natashe4ka:

No es así.
Debe tener la condición al principio y la función de cierre al principio.

Si necesita cerrar por condiciones individuales y no todas a la vez, entonces la función de cierre debe ser diferente.

Claro, pero ya lo he hecho y se lo he enviado, así que no dirá nada.

int start()
{
    //закрытие по МА-шкам
   if (FMA1<GrossMA1 && FMA2>GrossMA2 && Bid<FMA1-Distanse*GetPoint()) CloseOpBuySell("BUY");
   if (FRMA1>GrossMA1 && FRMA2<GrossMA2  &&  Ask>FRMA1+Distanse*GetPoint()) CloseOpBuySell("SELL");
  return(0);
}
//----
//-----------------------------------+

void CloseOpBuySell(string TypeClose)
   {
      for(int i=0;i<OrdersTotal();i++)
         {
            if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
               {
                   if(OrderSymbol()==Symbol() && OrderMagicNumber()==mn )
                      {
                        if(TypeClose=="BUY")
                          {
                              if(OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Bid,3,LawnGreen);
                           }
                        if(TypeClose=="SELL")
                          {
                              if(OrderType()==OP_SELL)OrderClose(OrderTicket(),OrderLots(),Ask,3,LawnGreen);
                          }
                     }
               }
         }
   }
 
Renat Akhtyamov,Natashe4ka muchas gracias.

 
lot=NormalizeDouble(AccountBalance()*MaximumRisk/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*100),1);
Así se calcula el lote .RiesgoMáximo==100 . Necesito que el lote se calcule automáticamente al máximo .He escrito MaximumRisk==100 para calcular el lote máximo posible en la apertura de la operación, ¿cuántas veces es correcto?
 
Movlat Baghiyev:
lot=NormalizeDouble(AccountBalance()*MaximumRisk/(MarketInfo(Symbol(),MODE_MARGINREQUIRED)*100),1);
He aquí una variante del cálculo del lote .Necesito que se calcule automáticamente para cada lote.He prescrito MaximumRisk==100 para calcular el lote máximo posible en la apertura de la operación.

Es mejor contar en base a los fondos disponibles que al saldo. De lo contrario, te arriesgas a recibir mucho más de lo que puedes pagar en el momento de abrir una operación.

También hay que calcular la dependencia del paso del lote, y luego comprobar si el lote está dentro de los lotes máximos y mínimos permitidos en la cuenta.

int MaximumRisk=100;
double lots,lotstep,free,margin, lotmin, lotmax;

lotmax=MarketInfo(Symbol(), MODE_MAXLOT);
lotmin=MarketInfo(Symbol(), MODE_MINLOT);
lotstep = MarketInfo(Symbol(), MODE_LOTSTEP);
reqmargin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
free=AccountFreeMargin();

lots = NormalizeDouble(lotstep*MathRound((free*MaximumRisk*0.01/reqmargin)/lotstep),2);

if (lots < lotmin) lots = lotmin;
if (lots > lotmax) lots = lotmax;
 
Vitalie Postolache:


Entendido. Gracias. Veamos qué pasa.
 
Vitalie Postolache:

Es mejor contar en base a los fondos disponibles que al saldo. De lo contrario, te arriesgas a recibir mucho más de lo que puedes pagar en el momento de abrir una operación.

También hay que calcular la dependencia del paso del lote, y luego comprobar si el lote está dentro de los lotes máximos y mínimos permitidos en la cuenta.

int MaximumRisk=100;
double lots,lotstep,free,margin, lotmin, lotmax;

lotmax=MarketInfo(Symbol(), MODE_MAXLOT);
lotmin=MarketInfo(Symbol(), MODE_MINLOT);
lotstep = MarketInfo(Symbol(), MODE_LOTSTEP);
reqmargin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
free=AccountFreeMargin();

lots = NormalizeDouble(lotstep*MathRound((free*MaximumRisk*0.01/reqmargin)/lotstep),2);

if (lots < lotmin) lots = lotmin;
if (lots > lotmax) lots = lotmax;
Esta opción no funciona como debería... Abrir una operación con el máximo lote posible, y después de cerrar la segunda no abre la segunda escribe no hay suficiente dinero...
 

Aplazado:

Gevorg Hakobyan, 2016.12.08 15:26

Hola. ¿Cómo puedo obtener una lista de todos los pares de divisas existentes en Meta Trader 4? ¿Y cómo puedo estar al tanto de los cambios en la lista?
 
Vladimir Karputov:

Aplazado:

Gevorg Hakobyan, 2016.12.08 15:26

Hola. ¿Cómo puedo obtener la lista de todos los pares de divisas existentes en Meta Trader 4? ¿Y cómo estar al tanto de cualquier cambio en la lista?

SímbolosTotal

Devuelve el número de símbolos disponibles (seleccionados en MarketWatch o todos).

intSímbolosTotal(
bool selected// true - sólo símbolos en MarketWatch
);

Parámetros

seleccionado

[en] Modo de solicitud. Puede tomar los valores verdadero o falso.

Valor devuelto

Si selected es true, se devuelve el número de caracteres seleccionados en MarketWatch. Si es falso, devuelve el número total de todos los símbolos.

 
Vladimir Karputov:

Aplazado:

Gevorg Hakobyan, 2016.12.08 15:26

Hola. ¿Cómo puedo obtener una lista de todos los pares de divisas existentes en Meta Trader 4? ¿Y cómo puedo estar al tanto de los cambios en la lista?
Y por lo que se traslada, es imposible escribir código que funcione multiplataforma, no hay diferencia en la tarea de conseguir los símbolos en las dos plataformas.
Razón de la queja: