EA para cada par de divisas - ¿qué código para abrir sólo una vez por par de divisas?

 

Para cada par de divisas utilizo un EA independiente.

Para verificar si una posición debe ser abierta, pruebo si no hay una orden abierta "if (OrdersTotal<1)" pero esto bloqueará todos los otros pares de divisas para abrir posiciones y pierdo oportunidades.

En otras palabras: Quiero abrir sólo una posición por par de divisas = debería ser posible abrir varias posiciones pero en diferentes pares de divisas.

¿Qué código debería utilizar en lugar de "if (OrdersTotal<1)"? ¿Puede alguien ayudarme? Gracias de antemano por su ayuda.

 

Cada par de divisas debe tener su propia GlobalVariable, por ejemplo "MyEA_EURUSD".

Si se restringe el EA a una operación por día el código sería

string sCheck = "MyEA_" + Symbol();

datetime t = TimeCurrent();

datetime tTrade = t - TimeHour(t)*60*60 - TimeMinute(t)*60 - TimeSeconds(t);

if(!GlobalVariableCheck(sCheck)) GlobalVariableSet(sCheck, tTrade -PERIOD_D1 * 60);

if(GlobalVariableGet(sCheck) < tTrade) {

OrderSend(......);

GlobalVariableSet(sCheck, tTrade);

}

 

Perdón por traer esto de nuevo a la cabeza pero estoy teniendo el mismo problema ahora mismo. Desgraciadamente sxTed no me ha respondido a la pregunta. Porque describir un tiempo de negociación es algo diferente a la cantidad de órdenes para cada par de divisas.

Traté de modificar las líneas de sxTed pero creo que fallé horriblemente en la solución de este problema:

string sCheck = "MyEA_" + Symbol();      // already the first error in the code, second quotes should be at the end of the line.

//I would correct this one to:
string sCheck = "MyEA_ + Symbol()";          //However symbol() is not a function anymore ??


int start ()
{

// Closing Orders here


if(!GlobalVariableCheck(sCheck))                    //checking Globalvariable, GV available so it becomes true (independently of what kind of GV we have)...

GlobalVariableSet(sCheck, Symbol() );               //.. assigning a new GlobalVariable to the function of the current symbol the EA is attached on (does it actually work like this?)

if(GlobalVariableGet(sCheck) == Symbol()) {         // checking if our Symbol is the one which the EA is attached on --> becomes true...


// Order Criteria (Open trades here)

// What now? Actually i'm missing any kind of numbers or smth that limits the open orders per currency pair.

¡¡¡Por favor: no me enlacen a ninguna literatura en este sitio o me digan que contrate a alguien, estoy estudiando el libro en este momento y me quedé atorado!!!

 
mqlfor:

Para cada par de divisas utilizo un EA independiente.

Para verificar si se debe abrir una posición, pruebo si no hay una orden abierta "if (OrdersTotal<1)" pero esto bloqueará todos los otros pares de divisas para abrir posiciones y pierdo oportunidades.

En otras palabras: Quiero abrir sólo una posición por par de divisas = debería ser posible abrir varias posiciones pero en diferentes pares de divisas.

¿Qué código debería utilizar en lugar de "if (OrdersTotal<1)"? ¿Puede alguien ayudarme? Gracias de antemano por su ayuda.


int total=OrdersTotal(); int count = 0; int magno = 12345; for(int pos=0;pos<total;pos++) { if(OrderSelect(pos,SELECT_BY_POS) == false) continue; if (OrderMagicNumber() != magno) continue; if (OrderSymbol() !=
Symbol()) continue; count++; } // Ahora sabes cuántas órdenes para este símbolo están abiertas por este EA. if (count < 1) { // haz algo - abre la orden quizás
} ¿Ayuda esto?
 
texto:

¿Esto ayuda?
No necesitas el número mágico... sólo usa el símbolo
 
texto:

¿Ayuda esto?
int total=OrdersTotal();

limita el total de openorders de TODOS los pares de divisas o no?

He insertado su código como sigue

int total=OrdersTotal();
int count = 0;
for(int pos=0;pos<total;pos++) 
{
    if(OrderSelect(pos,SELECT_BY_POS) == false) continue;
    if (OrderSymbol() != Symbol()) continue;
    count++;
}

if (Sell_1_1 < Sell_1_2 && CloseSell1_1 > CloseSell1_2 && count < 1) Order = SIGNAL_SELL; // Trigger for Sell

if (Buy_1_1 > Buy_1_2 && CloseBuy1_1 < CloseBuy1_2 && count < 1) Order = SIGNAL_BUY;    // Trigger for Buy


if (order == SIGNAL_BUY)
{
OrderSend(...)
}   

y sigue abriendo sólo una operación en absoluto. ¿Qué intentaba decirnos sxTed con su variable global?

 
grey.unit:

limita el total de openorders de TODOS los pares de divisas o no?

He insertado su código como sigue

y sigue abriendo sólo una operación en absoluto. ¿Qué estaba tratando de decirnos sxTed con su variable global?

¿En cuántos gráficos tiene su EA?
 
RaptorUK:
¿En cuántos gráficos tienes tu EA?
Para probar el código abrí 5 gráficos pero quiero abrir N gráficos. La cantidad no importa.
 
grey.unit:
Para probar el código he abierto 5 gráficos pero quiero abrir N gráficos. La cantidad no importa.
¿Has probado tu código en cada par uno a la vez para asegurarte de que tu EA abrirá una operación en cada par independientemente de lo que ocurra con otros pares? quizás tu EA sólo abre una operación porque sólo abrirá una operación en un par específico....
 
Claro que sí. Cuando tengo una operación abierta en, por ejemplo, EURJPY y la cierro manualmente, entonces tal vez otro EA abre una operación en otro par de divisas.
 
mqlfor:

Para cada par de divisas utilizo un EA independiente.

Para verificar si una posición debe ser abierta, pruebo si no hay una orden abierta "if (OrdersTotal<1)" pero esto bloqueará todos los otros pares de divisas para abrir posiciones y pierdo oportunidades.

En otras palabras: Quiero abrir sólo una posición por par de divisas = debería ser posible abrir varias posiciones pero en diferentes pares de divisas.

¿Qué código debería utilizar en lugar de "if (OrdersTotal<1)"? ¿Puede alguien ayudarme? Gracias de antemano por su ayuda.

El código es así :

 int Total_Order = OrdersTotal();
 for (pos = 0; pos <= Total_Order; pos ++)
      {
      if (OrderSelect (pos, SELECT_BY_POS) == true)
        {
        if (OrderSymbol () == Symbol ())
          {
          Print (":( Sorry already have that symbol opened ");
          // get outta here do something else
          break ;
          }
          else
          {
          Print ("No order opened for this symbol");
          Print ("Let\'s call waitress and order some drink :)");
          // do some order then break out and get out
          }
         }
       }
Razón de la queja: