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

 
onewithzachy:
Você está muito enganado. Seu código nunca é executado!!! Use o RaptorUK's.

Certo :)

Eu simplesmente fiquei confuso com isto:

"terminar quando j = 0"

obrigado!

 
grey.unit:

Portanto, deveria ser assim:

porque você escreveu isto:

ou eu estou errado?

Você está errado . ... dê uma olhada nisto: para

Em meu código a expressão 2 é j >= 0 significando . . . enquanto ( j >= 0 ) então o loop executa enquanto j é 0 ou maior, ou seja, de OrderTotal() - 1 até 0 inclusive

Se você usar j = 0 (talvez tenha que ser escrito j == 0) significa enquanto (j == 0) e o laço só é executado quando j é 0

 
Ah ok, agora eu entendi
 
RaptorUK:

Não, faça isso . . .

A primeira posição de ordem é 0, portanto se você tiver 5 ordens as posições são 0, 1, 2, 3, 4 . . . então a última é OrderTotal() - 1 . . . então para contar para baixo você começa em OrderTotal()-1 e termina em 0

Isto significa que OrdensTotal () -1 é Sem Ordens , depois 0 é 1ª ordem, 1 é 2 ordens e assim por diante para 4 que se igualam às 5 ordens.

Alguém me avisaria se eu entendesse que -1 é igual a No Orders , isto é correto?

Obrigado

 
barnacle7:

Isto significa que OrdensTotal () -1 é Sem Ordens , depois 0 é 1ª ordem, 1 é 2 ordens e assim por diante para 4 que se igualam às 5 ordens.

OrdensTotal() é o número de ordens em aberto. Sim, se você tiver 5 no total, elas são numeradas de 0 a 4
 

Também preciso de ajuda em relação à mesma questão. Sou um codificador novato e tenho tentado inserir o código que vi aqui, mas ele não está funcionando de forma alguma, podem me ajudar. A Orderselect foi utilizada

para substituir as ordensTotal e número de ordens de controle que cada EA faz, mas agora os outros não colocarão ordens

void OnTick()

{
       double movingAverageSS = iMA(NULL,60,LowerMAS,0,MODE_SMA,PRICE_CLOSE,0);    
       double lastmovingAverageSS = iMA(NULL,60,LowerMAS,0,MODE_SMA,PRICE_CLOSE,1);     
       double movingAverageSB = iMA(NULL,60,LowerMAB,0,MODE_SMA,PRICE_CLOSE,0);       
       double lastmovingAverageSB = iMA(NULL,60,LowerMAB,0,MODE_SMA,PRICE_CLOSE,1);          
       double movingAverageFS = iMA(NULL,60,UpperMAS,0,MODE_SMA,PRICE_CLOSE,0);    
       double lastmovingAverageFS = iMA(NULL,60,UpperMAS,0,MODE_SMA,PRICE_CLOSE,1);   
       double movingAverageFB = iMA(NULL,60,UpperMAB,0,MODE_SMA,PRICE_CLOSE,0);    
       double lastmovingAverageFB = iMA(NULL,60,UpperMAB,0,MODE_SMA,PRICE_CLOSE,1);    
       int b;int bM;int s;int sM;    
       bool res = (OrderSelect(b,SELECT_BY_POS));    
       bool resM = (OrderSelect(bM,SELECT_BY_POS));    
       bool ses = (OrderSelect(s,SELECT_BY_POS));    
       bool sesM = (OrderSelect(sM,SELECT_BY_POS));    
       
       if((lastmovingAverageFB<lastmovingAverageSB) && (movingAverageFB > movingAverageSB) && res == false  && resM == false )      
         {
         b = OrderSend (Symbol(),OP_BUY,lotSize,Ask,4,Ask - SLPB*_Point, Ask + TPB1*_Point,NULL,1,0,Green);       
         bM = OrderSend (Symbol(),OP_BUY,lotSize,Ask,4,Ask - SLPB*_Point, Ask + TPB2*_Point,NULL,2,0,Green);       
         }       
         else if((lastmovingAverageFS>lastmovingAverageSS)&&(movingAverageFS<movingAverageSS) && ses == false && sesM == false)     
         {  
         s = OrderSend (Symbol(),OP_SELL,lotSize,Bid,4,Ask + SLPS*_Point,Ask - TPS1*_Point,NULL,3,0,Red);       
        sM = OrderSend (Symbol(),OP_SELL,lotSize,Bid,4,Ask + SLPS*_Point,Ask - TPS2*_Point,NULL,4,0,Red);   
}


 
&& res == false

Orderselect retornará verdadeiro se tiver selecionado uma ordem.

Talvez você possa usar um número mágico em combinação com o nome do símbolo.

Aqui está um exemplo no artigo que você pode estudar:https://www.mql5.com/en/articles/1359

MagicNumber: "Magic" Identifier of the Order
MagicNumber: "Magic" Identifier of the Order
  • www.mql5.com
In МТ3, management of open positions was rather time-taking. Traders had at their disposal a rather limited tool set to work with the list of open and closed positions. The problem of distinguishing between "own" and "someone else's" positions was solved in rather complicated ways. In МТ4, the situation has cardinally changed. Now, trader can...
 
  1.        int b;int bM;int s;int sM;    
           bool res = (OrderSelect(b,SELECT_BY_POS));    
           bool resM = (OrderSelect(bM,SELECT_BY_POS));    
           bool ses = (OrderSelect(s,SELECT_BY_POS));    
           bool sesM = (OrderSelect(sM,SELECT_BY_POS));    

    b como sem valor, OrderSelect falha. bM como sem valor, OrderSelect falha. s como sem valor, OrderSelect falha. sM como sem valor, OrderSelect falha.

  2. Qual é a vantagem de selecionar várias ordens? O resultado é a última seleção bem sucedida.

  3.          b = OrderSend (Symbol(),OP_BUY,lotSize,Ask,4,Ask - SLPB*_Point, Ask + TPB1*_Point,NULL,1,0,Green);       
             bM = OrderSend (Symbol(),OP_BUY,lotSize,Ask,4,Ask - SLPB*_Point, Ask + TPB2*_Point,NULL,2,0,Green);       
    
    b e bM são variáveis locais. Os números dos bilhetes são perdidos quando você retorna.

  4. Por que você está tentando selecionar por posição, mas tentando armazenar números de bilhetes? Se você selecionar por um número de bilhete válido, isso não significa que o pedido está aberto.

  5. Você compra no Ask e vende no Bid.

    1. O TP/SL de seu pedido de compra (ou a entrada Sell Stop's/Sell Limit) é acionado quando o Bid / OrderClosePrice chega a ele. Usando o Ask±n, torna seu SL mais curto e seu TP mais longo, pelo spread. Você não deseja que a quantidade especificada seja usada em qualquer direção?

    2. O TP/SL de seu pedido de venda (ou a entrada de Stop's/Buy Limit de Compra) será acionado quando o Ask / OrderClosePrice chegar a ele. Para acionar a um preço Bid específico, adicione o spread médio.
      MODE_SPREAD (Paul) - Fórum de programação MQL4 - Página 3 #25

    3. Os gráficos mostram apenas os preços de licitação. Ligue a linha Ask para ver o tamanho do spread(Ferramentas → Opções (control+O) → gráficos → Mostrar linha Ask).
      A maioria dos corretores com spread variável aumenta consideravelmente no final do dia (5 PM ET) ± 30 minutos. Meu GBPJPY (OANDA) mostra spread médio = 26 pontos, mas spread máximo médio = 134.