Problema de pedidos múltiplos - página 3

 
luisneves:


Olá Kronin,

Sim, eu tenho muito a aprender....Agora entenda que quando há a necessidade de um valor para ser acessado de fora de uma função que deve estar na Global.

Isso não é verdade e também muitas vezes é uma má idéia.

Se a função é dificilmente codificada para trabalhar com variáveis globais específicas, ela pode se tornar menos flexível. Você deve considerar passar variáveis para a Função Definida pelo Usuário . . . nem sempre usar variáveis declaradas globalmente. Por exemplo:

//+--------------------------------------------------------------------------------+
//| ToStr function - calls DoubleToString (double, Digits) and returns the string  |
//+--------------------------------------------------------------------------------+
string ToStr(double ValueToString)
   {
   return (DoubleToStr(ValueToString, Digits));
   }

//+--------------------------------------------------------------------------------+

. isto não usa uma variável declarada globalmente, usa a variável passada para ela quando chamada . .

Print("Bid price is: ", ToStr(Bid) );
 
luisneves:


Olá Kronin,

Sim, tenho muito a aprender....Agora entendo que quando há a necessidade de um valor para ser acessado de fora de uma função que deve estar na Global.

Os valores que estão no externo são multiplicados por 10 porque a EA também deve funcionar em corretores de 5 dígitos. Estou usando este bloco de código para obtê-lo automaticamente, mas recebo um aviso da WHRoeder que não é compatível com metais.

A propagação do par pode ser variável. É por isso que estou usando o código para sair do nível de parada.

Com relação a esta questão "Mas eu ajustei seus parâmetros de entrada para não ter todas as ordens abertas praticamente ao mesmo tempo.Talvez você tenha que verificar os parâmetros de entrada padrão".

Até onde eu posso ver (desculpe se não estou...), OpenDistance mantém como 2 pips e ReturnDistance agora também está com 2. O que estou vendo agora é que a ordem abre mas não com 2 pips de diferença. Isto está funcionando com um testador de uma plataforma de um corretor ECN (IC Markets). Isto poderia ter alguma importância?

Na verdade, as ordens não abrem ao mesmo tempo, mas parece que a Distância Aberta e o ReturnDist não são levados em conta para obter a distância certa para abrir ordens.

Você tem isso em código;

Incluí a linha em negrito para chamar a função OpenOppositeOrder e aqui não tenho certeza se isto está certo. Para o outro lado não posso ver onde está a comparação do tick presente com o último tick que aconteceu 2 pips antes (OpenDistance).

Desculpe se começo a aborrecê-lo com meus problemas.

Com a maior consideração

Luis



Olá Kronin,

Eu só prestei mais atenção porque perguntei qual é a propagação e apenas procurei o Testador que algo está errado. Aqui o spread é de 50 (5 dígitos) então 5 na verdade. Hummm... Eu vou reiniciar a plataforma e confirmar.

Luis

 
RaptorUK:

Isso não é verdade e também muitas vezes é uma má idéia.

Se a função é dificilmente codificada para trabalhar com variáveis globais específicas, ela pode se tornar menos flexível. Você deve considerar passar variáveis para a Função Definida pelo Usuário . . . nem sempre usar variáveis declaradas globalmente. Por exemplo:

. isto não usa uma variável declarada globalmente, usa a variável passada para ela quando chamada . .


Olá RaptorUK.

Obrigado por sua intervenção para me manter na direção certa...

A propósito, você já ouviu algo parecido com o que eu mencionei a respeito do problema com o Testador, o que significa que neste momento o spread é de 50 quando na sexta-feira não era?

Melhores Cumprimentos

Luis

 
luisneves:


Olá RaptorUK.

Obrigado por sua intervenção para me manter na direção certa...

Melhores cumprimentos

Luis

Sim, a idéia com a função não foi realmente destinada a declará-los todos como nulos.... Acabei de remover a declaração em seu MM() nulo para que a LotSize deixasse a EA negociar novamente... - Pensei que falaríamos mais tarde sobre isso novamente... :-)

No "não aberto no ponto de nível 2 pips".
Por exemplo, não tenho dados para testar, também o spread é mais de 2 pips (eu poderia ajustá-lo, mas o que ajuda, se eu não tenho dados?). Tudo isso torna difícil testar algo com aquela parada fechada confiável.


16:21:09 _help_53198_markettorderdecnqv80 entradas: EquityPercent=1; FixedLotSize=0,01; Multiplier=2; LotDigits=2; StopLoss=50; TakeProfit=20; TrailingStop=2; MinimumProfit=3; Slippage=3; OpenDistance=2; ReturnDist=1; MinStop=1; MagicNumber=8012013; MaxOrders=7;
EURUSD,M1: abrir #1 comprar 0,01 EURUSD a 1,43310 ok
EURUSD,M1: Pedido de Compra Inital # 1
EURUSD,M1: modificar #1 comprar 0,01 EURUSD a 1,43310 sl: 1,42810 tp: 1,43510 ok
EURUSD,M1: abrir #2 vender 0,01 EURUSD a 1,43257 ok
EURUSD,M1: Encomenda de venda em oposição # 2
EURUSD,M1: modificar #2 vender 0,01 EURUSD a 1,43257 sl: 1,43757 tp: 1,43057 ok
EURUSD,M1: abrir #3 comprar 0,01 EURUSD a 1,43283 ok
EURUSD,M1: Ordem de compra contrária # 3
EURUSD,M1: modificar #3 comprar 0,01 EURUSD a 1,43283 sl: 1,42783 tp: 1,43483 ok
EURUSD,M1: abrir #4 vender 0,01 EURUSD a 1,43230 ok
EURUSD,M1: Encomenda de venda em oposição # 4
EURUSD,M1: modificar #4 vender 0.01 EURUSD a 1.43230 sl: 1.43730 tp: 1.43030 ok
EURUSD,M1: abrir #5 comprar 0,01 EURUSD a 1,43280 ok
EURUSD,M1: Ordem de compra contrária colocada # 5
EURUSD,M1: modificar #5 comprar 0,01 EURUSD a 1,43280 sl: 1,42780 tp: 1,43480 ok
EURUSD,M1: abrir #6 vender 0,01 EURUSD a 1,43200 ok
EURUSD,M1: Encomenda de venda em oposição # 6
EURUSD,M1: modificar #6 vender 0,01 EURUSD a 1,43200 sl: 1,43700 tp: 1,43000 ok
EURUSD,M1: abrir #7 comprar 0,01 EURUSD a 1,43250 ok
EURUSD,M1: Ordem de compra contrária # 7
EURUSD,M1: modificar #7 comprar 0,01 EURUSD a 1,43250 sl: 1,42750 tp: 1,43450 ok
EURUSD,M1: modificar #7 comprar 0,01 EURUSD a 1,43250 sl: 1,43267 tp: 1,43450 ok
EURUSD,M1: modificar #7 comprar 0,01 EURUSD a 1,43250 sl: 1,43283 tp: 1,43450 ok
EURUSD,M1: modificar #3 comprar 0,01 EURUSD a 1,43283 sl: 1,43300 tp: 1,43483 ok
EURUSD,M1: modificar #5 comprar 0,01 EURUSD a 1,43280 sl: 1,43300 tp: 1,43480 ok
EURUSD,M1: modificar #7 comprar 0,01 EURUSD a 1,43250 sl: 1,43300 tp: 1,43450 ok
Testador: pare a perda #3 a 1.43300 (1.43300 / 1.43340)
Testador: pare a perda #5 a 1.43300 (1.43300 / 1.43340)
Testador: pare a perda #7 a 1.43300 (1.43300 / 1.43340)
EURUSD,M1: LastClosedTicket=7
EURUSD,M1: Pedido com ticketnr: 7 hit SL! Fechar todos os pedidos abertos
EURUSD,M1: fechamento #6 venda 0,01 EURUSD a 1,43200 sl: 1,43700 tp: 1,43000 ao preço 1,43340
EURUSD,M1: fechamento #4 venda 0.01 EURUSD a 1.43230 sl: 1.43730 tp: 1.43030 ao preço 1.43340
EURUSD,M1: fechamento #2 venda 0,01 EURUSD a 1,43257 sl: 1,43757 tp: 1,43057 ao preço 1,43340
EURUSD,M1: fechar #1 comprar 0,01 EURUSD a 1,43310 sl: 1,42810 tp: 1,43510 ao preço 1,43300

Do meu ponto de vista, ela faz o que você quer. Nunca mudei seu cálculo para OpenOpposite ou abrir a ordem inital .

 
kronin:

Sim, a idéia com a função não foi realmente destinada a declará-los todos como nulos.... Acabei de remover a declaração em seu MM() nulo para que a LotSize deixasse a EA negociar novamente... - Pensei que falaríamos mais tarde sobre isso novamente... :-)

No "não aberto no ponto de nível 2 pips".
Por exemplo, não tenho dados para testar, também o spread é mais de 2 pips (eu poderia ajustá-lo, mas o que ajuda, se eu não tenho dados?). Tudo isso torna difícil testar algo com aquela parada fechada confiável.


16:21:09 _help_53198_markettorderdecnqv80 entradas: EquityPercent=1; FixedLotSize=0,01; Multiplier=2; LotDigits=2; StopLoss=50; TakeProfit=20; TrailingStop=2; MinimumProfit=3; Slippage=3; OpenDistance=2; ReturnDist=1; MinStop=1; MagicNumber=8012013; MaxOrders=7;
EURUSD,M1: abrir #1 comprar 0,01 EURUSD a 1,43310 ok
EURUSD,M1: Pedido de Compra Inital # 1
EURUSD,M1: modificar #1 comprar 0,01 EURUSD a 1,43310 sl: 1,42810 tp: 1,43510 ok
EURUSD,M1: abrir #2 vender 0,01 EURUSD a 1,43257 ok
EURUSD,M1: Encomenda de venda em oposição # 2
EURUSD,M1: modificar #2 vender 0,01 EURUSD a 1,43257 sl: 1,43757 tp: 1,43057 ok
EURUSD,M1: abrir #3 comprar 0,01 EURUSD a 1,43283 ok
EURUSD,M1: Ordem de compra contrária # 3
EURUSD,M1: modificar #3 comprar 0,01 EURUSD a 1,43283 sl: 1,42783 tp: 1,43483 ok
EURUSD,M1: abrir #4 vender 0,01 EURUSD a 1,43230 ok
EURUSD,M1: Encomenda de venda em oposição # 4
EURUSD,M1: modificar #4 vender 0.01 EURUSD a 1.43230 sl: 1.43730 tp: 1.43030 ok
EURUSD,M1: abrir #5 comprar 0,01 EURUSD a 1,43280 ok
EURUSD,M1: Ordem de compra contrária colocada # 5
EURUSD,M1: modificar #5 comprar 0,01 EURUSD a 1,43280 sl: 1,42780 tp: 1,43480 ok
EURUSD,M1: abrir #6 vender 0,01 EURUSD a 1,43200 ok
EURUSD,M1: Encomenda de venda em oposição # 6
EURUSD,M1: modificar #6 vender 0,01 EURUSD a 1,43200 sl: 1,43700 tp: 1,43000 ok
EURUSD,M1: abrir #7 comprar 0,01 EURUSD a 1,43250 ok
EURUSD,M1: Ordem de compra contrária # 7
EURUSD,M1: modificar #7 comprar 0,01 EURUSD a 1,43250 sl: 1,42750 tp: 1,43450 ok
EURUSD,M1: modificar #7 comprar 0,01 EURUSD a 1,43250 sl: 1,43267 tp: 1,43450 ok
EURUSD,M1: modificar #7 comprar 0,01 EURUSD a 1,43250 sl: 1,43283 tp: 1,43450 ok
EURUSD,M1: modificar #3 comprar 0,01 EURUSD a 1,43283 sl: 1,43300 tp: 1,43483 ok
EURUSD,M1: modificar #5 comprar 0.01 EURUSD a 1.43280 sl: 1.43300 tp: 1.43480 ok
EURUSD,M1: modificar #7 comprar 0,01 EURUSD a 1,43250 sl: 1,43300 tp: 1,43450 ok
Testador: pare a perda #3 a 1.43300 (1.43300 / 1.43340)
Testador: pare a perda #5 a 1.43300 (1.43300 / 1.43340)
Testador: pare a perda #7 a 1.43300 (1.43300 / 1.43340)
EURUSD,M1: LastClosedTicket=7
EURUSD,M1: Pedido com ticketnr: 7 hit SL! Fechar todos os pedidos abertos
EURUSD,M1: fechamento #6 venda 0,01 EURUSD a 1,43200 sl: 1,43700 tp: 1,43000 ao preço 1,43340
EURUSD,M1: fechamento #4 venda 0.01 EURUSD a 1.43230 sl: 1.43730 tp: 1.43030 ao preço 1.43340
EURUSD,M1: fechamento #2 venda 0,01 EURUSD a 1,43257 sl: 1,43757 tp: 1,43057 ao preço 1,43340
EURUSD,M1: fechar #1 comprar 0,01 EURUSD a 1,43310 sl: 1,42810 tp: 1,43510 ao preço 1,43300

Do meu ponto de vista, ela faz o que você quer. Nunca mudei seu cálculo para OpenOpposite ou abrir a ordem inital .


Olá Kronin,

Estou baixando outra plataforma de outro corretor e vou esperar para testá-lo novamente e informá-lo sobre os resultados.

Obrigado novamente

Luis

 

Olá Kronin,

Eu acabei de confirmar que no Tester o spread saltou para 5 pips (50). Então hoje no Tester seu código mostra que funciona muito bem, agora eu o coloquei em uma conta ECN Demo e vou ver.

Com os melhores cumprimentos

Luis

 

Olá Kronin,

Uma questão;

Quando a EA começa, não deveria esperar para fixar um preço diferente de 2 pip antes de abrir o primeiro pedido?

Quando a segunda ordem tem a condição de abrir, ela abre no lugar certo.

Melhores cumprimentos

Luis

 
luisneves:

Olá Kronin,

Uma questão;

Quando a EA começar, não deveria esperar para fixar um preço diferente de 2 pip antes de abrir o primeiro pedido?

Quando a segunda ordem tem a condição de abrir, ela abre no lugar certo.

Melhores cumprimentos

Luis

Oi Luis

Bem, provavelmente deveria de acordo com a estratégia, mas é claro que não de acordo com o código...

if(OpenDistance*pt && BuyAllowed) //<-- this doesn't make any sense.

O acima é lido como se (2*0.0001 && true) . Qualquer expressão numérica diferente de 0 é interpretada como verdadeira. Portanto, a expressão é sempre verdadeira se BuyAllowed for verdadeira.

Desculpe, não prestei atenção à primeira abertura de uma série e como são apenas 2 pips, não notei nada de anormal.

Experimente isto:

//global scope
double BuyTrigger,SellTrigger;

//init function
BuyTrigger=Ask+OpenDistance*pt;
SellTrigger=Bid-OpenDistance*pt;

//start function
  OTCurrentTick=OrdersTotal();                   //reinit OrderTotal   <<-- this is already there, place the 4 lines below after this line
  if(OTCurrentTick==0&&OTLastTick>0){
     BuyTrigger=Ask+OpenDistance*pt;
     SellTrigger=Bid-OpenDistance*pt;
  }

if(Ask>BuyTrigger && BuyAllowed)                // <-- use this instead of if(OpenDistance*pt && BuyAllowed)

if(Bid<SellTrigger && SellAllowed)
 

Olá Kronin,

Lamento aborrecê-lo com minhas limitações na compreensão do código, no entanto, não é tarde demais para aprender e estou tentando me levantar mais para entrar no código que você tão gentilmente forneceu.

Neste momento, estou testando as melhores configurações para usar e apresentarei seu último código atualizado.

Obrigado antecipadamente para continuar me apoiando nestas questões( aventuras...quero dizer....)

Luis

 

Olá Kronin,

Sua modificação está funcionando. Você limitou as ordens máximas, bur é isso possível para fechá-las todas, em vez disso ?

Eu tentei fazer isso com o seguinte código, mas parece não funcionar.

if(LastClosedTicket>0|| OrdersTotal()>= MaxOrders)

Melhores cumprimentos

Luis

Razão: