EA para cada par de moedas - que código abrir apenas uma vez por par de moedas?

 

Para cada par de moedas eu uso um EA separado.

Para verificar se uma posição deve ser aberta, eu testei se não há nenhuma ordem aberta "se (OrdensTotal<1)", mas isto bloqueará todos os outros pares de moedas para abrir posições e eu perco oportunidades.

Em outras palavras: Quero abrir apenas uma posição por par de moedas = múltiplas posições devem ser possíveis, mas em pares de moedas diferentes.

Que código devo usar ao invés do "se (OrdensTotal<1)"? Alguém pode me ajudar? Agradecemos antecipadamente por sua ajuda.

 

Cada par de moedas para ter sua própria GlobalVariable, por exemplo, "MyEA_EURUSD".

Se você estivesse restringindo a EA a uma negociação por dia, o código seria:

string sCheck = "MyEA_" + Symbol();

data/hora 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);

}

 

Desculpe por trazer isto de volta ao topo, mas estou tendo o mesmo problema agora mesmo. Infelizmente sxTed não respondeu a pergunta para mim. Porque descrever um tempo de negociação é algo diferente do que a quantidade de ordens para cada par de moedas.

Eu tentei modificar as linhas do sxTed, mas acho que falhei horrivelmente na solução deste 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: não me ligue a nenhuma literatura deste lugar ou me diga para contratar alguém, estou estudando o livro agora mesmo e fiquei preso!!!

 
mqlfor:

Para cada par de moedas eu uso um EA separado.

Para verificar se uma posição deve ser aberta, eu testei se não há nenhuma ordem aberta "se (OrdensTotal<1)", mas isto bloqueará todos os outros pares de moedas para abrir posições e eu perco oportunidades.

Em outras palavras: Quero abrir apenas uma posição por par de moedas = múltiplas posições devem ser possíveis, mas em pares de moedas diferentes.

Que código devo usar ao invés do "se (OrdensTotal<1)"? Alguém pode me ajudar? Agradecemos antecipadamente por sua ajuda.


int total=OrdensTotal();int contagem = 0;int magno = 12345;for(int pos=0;pos<total;pos++) { if(OrderSelect(pos,SELECT_BY_POS) == falso) continue; if (OrderMagicNumber() != magno) continue; if (OrderSymbol() != Symbol()) continue; count++;}/ Agora você sabe quantas ordens para este símbolo estão abertas por este EA.if (count < 1) {// faça alguma coisa - ordem aberta talvez}
Isto ajuda?
 
texto:

Isto ajuda?
Você não precisa do número mágico . . . use apenas o símbolo
 
texto:

Será que isso ajuda?
int total=OrdersTotal();

limita ou não o total de ordens abertas de TODOS os pares de moedas?

Eu inseri seu código como 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 ainda está abrindo apenas uma profissão. O que o sxTed estava tentando nos dizer com sua variável global?

 
grey.unit:

limita ou não o total de pedidos abertos de TODOS os pares de moedas?

Eu inseri seu código como segue

e ainda está abrindo apenas uma profissão. O que o sxTed estava tentando nos dizer com sua variável global?

Em quantos gráficos você tem sua EA?
 
RaptorUK:
Em quantos gráficos você tem sua EA?
Para testar o código eu abri 5 gráficos, mas quero abrir N gráficos. A quantidade não importa.
 
grey.unit:
Para testar o código eu abri 5 gráficos, mas quero abrir N gráficos. O valor não importa.
Você já testou seu código em cada par, um de cada vez, para ter certeza de que a EA abrirá uma negociação em cada par, independentemente do que está acontecendo com outros pares? talvez sua EA esteja abrindo apenas uma negociação, pois ela abrirá uma negociação apenas em um par específico ...
 
claro que sim. Quando eu tenho uma negociação aberta, digamos EURJPY, e a fecho manualmente, talvez outra EA abra uma negociação em outro par de moedas.
 
mqlfor:

Para cada par de moedas eu uso um EA separado.

Para verificar se uma posição deve ser aberta, eu testei se não há nenhuma ordem aberta "se (OrdensTotal<1)", mas isto bloqueará todos os outros pares de moedas para abrir posições e eu perco oportunidades.

Em outras palavras: Quero abrir apenas uma posição por par de moedas = múltiplas posições devem ser possíveis, mas em pares de moedas diferentes.

Que código devo usar ao invés do "se (OrdensTotal<1)"? Alguém pode me ajudar? Agradecemos antecipadamente por sua ajuda.

Codifique desta forma :

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