EA per ogni coppia di valute - quale codice per aprire solo una volta per coppia di valute?

 

Per ogni coppia di valute uso un EA separato.

Per verificare se una posizione deve essere aperta, verifico se non c'è un ordine aperto "if (OrdersTotal<1)" ma questo blocca tutte le altre coppie di valute per aprire posizioni e perdo delle opportunità.

In altre parole: Voglio aprire solo una posizione per coppia di valute = posizioni multiple dovrebbero essere possibili ma in diverse coppie di valute.

Quale codice dovrei usare al posto del "if (OrdersTotal<1)"? Qualcuno può aiutarmi? Grazie in anticipo per il vostro aiuto.

 

Ogni coppia di valute deve avere la propria GlobalVariable, per esempio "MyEA_EURUSD".

Se si sta limitando l'EA a un trade al giorno il codice sarebbe:

stringa 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);

}

 

Scusate se riporto questo in cima, ma sto avendo lo stesso problema in questo momento. Purtroppo sxTed non mi ha risposto alla domanda. Perché descrivere un tempo di trading è qualcosa di diverso dalla quantità di ordini per ogni coppia di valute.

Ho provato a modificare le linee di sxTed ma credo di aver fallito terribilmente nel risolvere questo 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.

PER FAVORE: non collegatemi a nessuna letteratura in questo posto o ditemi di assumere qualcuno, sto studiando il libro in questo momento e sono rimasto bloccato!!!

 
mqlfor:

Per ogni coppia di valute uso un EA separato.

Per verificare se una posizione deve essere aperta, verifico se non c'è un ordine aperto "if (OrdersTotal<1)" ma questo bloccherà tutte le altre coppie di valute per aprire posizioni e perdo opportunità.

In altre parole: Voglio aprire solo una posizione per coppia di valute = posizioni multiple dovrebbero essere possibili ma in diverse coppie di valute.

Quale codice dovrei usare al posto del "if (OrdersTotal<1)"? Qualcuno può aiutarmi? Grazie in anticipo per il vostro aiuto.


int total=OrdersTotal(); int count = 0; int magno = 12345; for(int pos=0;pos<totale;pos++) { if(OrderSelect(pos,SELECT_BY_POS) == false) continua; if (OrderMagicNumber() != magno) continua; if (OrderSymbol() != Symbol()) continua; count++; } // Ora sai quanti ordini per questo simbolo sono aperti da questo EA. if (count < 1) { // fai qualcosa - apri l'ordine forse }
Questo ti aiuta?
 
texto:

Questo aiuta?
Non hai bisogno del numero magico. . . basta usare il simbolo
 
texto:

Questo aiuta?
int total=OrdersTotal();

limita il totale degli openorder di TUTTE le coppie di valute o no?

Ho inserito il tuo codice come segue

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(...)
}   

e continua ad aprire un solo trade in tutto. Cosa stava cercando di dirci sxTed con la sua variabile globale?

 
grey.unit:

limita il totale degli ordini aperti di TUTTE le coppie di valute o no?

Ho inserito il tuo codice come segue

e continua ad aprire un solo trade in tutto. Cosa stava cercando di dirci sxTed con la sua variabile globale?

Su quanti grafici hai il tuo EA?
 
RaptorUK:
Su quanti grafici hai il tuo EA?
Per testare il codice ho aperto 5 grafici ma voglio aprire N grafici. La quantità non ha importanza.
 
grey.unit:
Per testare il codice ho aperto 5 grafici ma voglio aprire N grafici. La quantità non ha importanza.
Hai testato il tuo codice su ogni coppia una alla volta per assicurarti che il tuo EA aprirà un trade su ogni coppia indipendentemente da ciò che sta accadendo con le altre coppie? Forse il tuo EA sta aprendo solo un trade perché aprirà un trade solo su una specifica coppia...
 
Certo che l'ho fatto. Quando ho un trade aperto su EURJPY e lo chiudo manualmente, allora forse un altro EA apre un trade su un'altra coppia di valute.
 
mqlfor:

Per ogni coppia di valute uso un EA separato.

Per verificare se una posizione deve essere aperta, verifico se non c'è un ordine aperto "if (OrdersTotal<1)" ma questo bloccherà tutte le altre coppie di valute per aprire posizioni e perdo opportunità.

In altre parole: Voglio aprire solo una posizione per coppia di valute = posizioni multiple dovrebbero essere possibili ma in diverse coppie di valute.

Quale codice dovrei usare al posto del "if (OrdersTotal<1)"? Qualcuno può aiutarmi? Grazie in anticipo per il vostro aiuto.

Codificalo in questo modo :

 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
          }
         }
       }