[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 149

 

Por favor, aconseja a un novato, AccountBalance() - muestra la cantidad de fondos en el balance, pero necesito calcular mi balance calculado (calc_balance),

Este balance es simple, pero aún no puedo escribirlo, hay una cantidad total de órdenes abiertas y pendientes (Orderstotal), por ejemplo 3 órdenes, el riesgo máximo por una posición abierta es del 2%,

para abrir otra operación necesito calcular el riesgo máximo (2%) del saldo calculado, es decir, la lógica de la fórmula sería aproximadamente: calc_balance=AccountBalance()-2%-2%-2%,

Es decir, una sustracción consistente - pero cómo escribirlo en código aún no ha tenido éxito, espero su ayuda.

Gracias de antemano!

 
¿Pueden decirme cómo se separan los fondos (AccountEquity() ) y las garantías (AccountMargin() ) para las posiciones de compra y de venta?
 
T-G:
¿Pueden decirme cómo se separan los fondos (AccountEquity() ) y las garantías (AccountMargin() ) para las posiciones de compra y de venta?
AccountEquity() sólo es posible para su cuenta y AccountMargin() con sus condiciones ¡vea las muy "útiles funciones" de Kim!
 
Señores, alguien puede aconsejar un indicador o un Expert Advisor, que exponga los niveles de soporte y resistencia en D1, sin rezagos preferiblemente)))
 
Top2n:
Señores, puede alguien aconsejar un indicador o asesor experto, que exponga los niveles de soporte y resistencia en D1, sin rezagos preferiblemente)))
Búsqueda de: DailyPivotPoints
 

Buenas tardes a todos, tengo un problema y no consigo saber qué es.


Hay dos funciones dadas. Si llamo al 1, no funciona nada. En el segundo caso, todo funciona. Por favor, indique cuál es el error.

Gracias de antemano.

int OrderBuy(double pLots, string pComment, int pMagic, int pDatetime, color pColor)
{
   int ticket = 0;
   int err = 0;
   int c = 0;
   int NumberOfTries = 100;
   for (c = 0; c < NumberOfTries; c++) 
     {
         RefreshRates();
         ticket = OrderSend(Symbol(), OP_BUY, pLots, Ask, 0, Ask-0.0005, Ask+0.0005, pComment, pMagic, pDatetime, pColor);
         err = GetLastError();
         if (err == 0/* NO_ERROR */) break;
         if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break;
         Sleep(5000);
      }
      return(ticket);

}


int OrderSell(double pLots, string pComment, int pMagic, int pDatetime, color pColor)
{
   int ticket = 0;
   int err = 0;
   int c = 0;
   int NumberOfTries = 100;
   
   for (c = 0; c < NumberOfTries; c++) 
   {
         RefreshRates();
         ticket = OrderSend(Symbol(), OP_SELL, pLots, Bid, 0, Bid+0.0005, Bid-0.0005, pComment, pMagic, pDatetime, pColor);
         err = GetLastError();
         if (err == 0/* NO_ERROR */) break;
         if (!(err == 4/* SERVER_BUSY */ || err == 137/* BROKER_BUSY */ || err == 146/* TRADE_CONTEXT_BUSY */ || err == 136/* OFF_QUOTES */)) break;
         Sleep(5000);
    }
    return(ticket);

}





//вызовы функций

ticket = OrderBuy(lot, "---"+count+" ---", MagicNumber, 0, HotPink);
         Print(ticket+":тикет");//здесь выдает -1
         if (ticket < 0) 
               {
                  Print("Error: ", GetLastError());//здесь выдает "0";
                  return (0);
               } 




ticket = OrderSell(lot, "---"+count+" ---", MagicNumber, 0, HotPink);
         Print(ticket+":тикет");
         if (ticket < 0) 
               {
                  Print("Error: ", GetLastError());
                  return (0);
               } 
 
Si quieres mantenerte dentro de los cálculos del terminal, lo más fácil es restar a lo que tienes lo que queda si abres una orden adecuada:
double ld_MarginPosition = AccountFreeMargin() - AccountFreeMarginCheck();
 
arabon:

Buenas tardes a todos, tengo un problema y no consigo saber qué es.


Hay dos funciones dadas. Si llamo al 1, no funciona nada. En el segundo caso, todo funciona. Por favor, indique cuál es el error.

Gracias de antemano.


La función GetLastError() que en OrderSell y OrderBuy en el bucle, restablece el valor del error (ver ayuda en GetLastError ATENCIÓN), por lo tanto

Print("Error: ", GetLastError());

Intenta imprimirlo directamente en el bucle, entonces verás donde la orden no se abre debido a un error.

 

Hice un simple indicador que "voltea" el instrumento. A veces, para la percepción es más fácil ver un par al revés, y el ojo se "lava" al mirar la misma imagen. Nunca he leído de un archivo (ni siquiera he intentado trabajar con un archivo), puedo mostrar un gráfico completo, ¿alguien tiene alguna idea?


Archivos adjuntos:
converter.mq4  2 kb
 

Todavía no lo he encontrado ni buscando ni entre las funciones de Kim.

¿Cómo calcular correctamente el margen de las órdenes abiertas por separado?

Yo lo hacía así:

в цикле
if (OrderType() == OP_BUY ) {  
   MarginBuy += (OrderOpenPrice()*OrderLots()/AccountLeverage())*MarketInfo(Symbol(), MODE_LOTSIZE);
}
         
if (OrderType() == OP_SELL ) {  
   MarginSell += (OrderOpenPrice()*OrderLots()/AccountLeverage())*MarketInfo(Symbol(), MODE_LOTSIZE);
}

Tengo un valor diferente al que muestra el terminal

Si quieres encajar los cálculos del terminal, lo más fácil es restar a lo que tienes lo que queda si abres la orden correspondiente:
double ld_MarginPosition = AccountFreeMargin() - AccountFreeMarginCheck();


No puedes simplemente restarlo. Necesito un cálculo separado para cada dirección.