[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 466

 
Cmu4:

Não... Eu fiz como você sugeriu - a mesma coisa permanece.

Também mudei o código, dividindo separadamente os blocos de abertura e fechamento por condições. É tudo a mesma coisa. Eu não sei o que fazer agora.

Aqui está uma captura de tela do testador, EA para o testador está no trailer:


Você poderia ir assim, com um controle de posição aberta
Arquivos anexados:
 
Vinin:

Poderia ser algo assim, com controle de posições em aberto.


Também pensado nesta direção. Mas eu estou interessado no erro em si. Onde está?

p.s. Obrigado por acrescentar ao código! Quando pomposo, ele reclama de um tipo de ordem não definida, na função Closeall.

 
Cmu4:


Também pensado nesta direção. Mas eu estou interessado no erro em si. Onde está?

p.s. Obrigado por acrescentar ao código! Quando pomposo, ele jura sobre o tipo de ordem não definida, na função Closeall.


void Closeall(int OP=-1)
{
   for (int i=OrdersTotal()-1; i>=0; i--) 
   { 
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
      { 
         if(OrderSymbol()==Symbol())
         { 
            if (OrderType()==OP || OP=-1) 
            {
               if(OrderType()==OP_BUY)
                  OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
               else if(OrderType()==OP_SELL)
                  OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
            }
         } 
      }
   }
}
 
Cmu4:

Não... Eu fiz como você sugeriu - a mesma coisa permanece.

Também mudei o código, dividindo separadamente os blocos de abertura e fechamento por condições. É tudo a mesma coisa. Eu não sei o que fazer agora.

Aqui está uma captura de tela de um testador, o Expert Advisor está no trailer:

Preciso saber: As posições são abertas em uma fila como esta? Comprar, Vender, Comprar, Vender, etc. ou consecutivos, por exemplo, Comprar.

Acho que você tem posições de Compra e Venda abrindo em sucessão.

A razão: os MACDs que estão sendo comparados estão muito próximos e mudam de lugar (maior é menor) rapidamente. Portanto, uma condição é cumprida primeiro e depois a outra.

Solução:

if (MA1-MA2 > 0.0001 &&  MA2-MA3 > 0.0001 && Napr==1) //или другая константа
 
extralifes:

não até se não funcionar.

Deve ser contanto que a condição (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2 esteja correta, para abrir apenas um pedido de venda se iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7)

É o mesmo no sentido inverso.

Pode ser feito enquanto ou bool? Estou em uma crise total na programação. Entendo a cadeia lógica, mas minhas mãos são lentas para executá-la em código.


Então esse não é o problema... tudo deve funcionar se... Funciona dessa forma - desde que (seu mesmo enquanto ) a condição (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2 - seja cumprida e RSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0,7), então abrimos apenas o lucro...

Você não precisa de nenhum bool aqui - por que você deve lidar com bandeiras, quando tudo está claro que enquanto todas essas condições são cumpridas, nós abrimos ordens de compra ou venda?

total=OrdersTotal();
if(total<1)

{

  if (d_mn_1>d_pl_1 && (d_mn_0-d_pl_0)>=2 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)>0.7 &&  iRSI(NULL,0,rsi_period,PRICE_CLOSE,0<0.7)
        OrderSend(Symbol(), OP_SELL, lots, NormalizeDouble(Bid, Digits), 3, /*Ask+10*Point*/0, /*Bid-10*Point*/0, "ADX sell", magic, 0, CLR_NONE);
   

  if (d_pl_1>d_mn_1 && (d_pl_0-d_mn_0)>=2 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,2)<0.3 && iRSI(NULL,0,rsi_period,PRICE_CLOSE,0) > 0.3) 
       OrderSend(Symbol(), OP_BUY, lots, NormalizeDouble(Ask, Digits), 3, /*Bid-10*Point*/0, /*Ask+10*Point*/0, "ADX buy", magic, 0, CLR_NONE);

  }

Olhe com atenção mais uma vez.

Procure o erro em outro lugar no código. Você escreve "não funciona com se" - explique com mais detalhes - o que diz no "log"?

 
ikatsko:

Olá! eu não quero (e às vezes quero) acertar um StopOut. Eu decidi limitar o lote a um valor que não "pegaria" StopOut nas piores condições. Passando por tentativas e erros por muito tempo. Talvez alguém tenha uma solução?

Dados iniciais:

- Par de moedas - não necessariamente EURUSD

- preço (preço de compra/venda)

- um StopLoss especificado em pontos (assume-se que o pior cenário é não pegar um StopOut mesmo que o nível do StopLoss seja alcançado)

- valor de lote especificado

- Outros valores devem ser preenchidos usando as funções MT4: tamanho 1 lote, alavancagem, taxa cruzada.

De preferência, um código.

Em teoria, entendo o que é necessário: equilíbrio menos possível perda no nível StopLoss dividido pela margem. E este valor deve ser maior do que o StopOut (em termos percentuais).

Algo como isto

int level=AccountStopoutLevel(); ///// ТОЛЬКО ЕСЛИ ВЫРАЖЕН В ПРОЦЕНТАХ!!!
if (AccountStopoutMode==0)
  {
   double Marga = NormalizeDouble(MarketInfo("EURUSD", MODE_MARGINREQUIRED), 2);
   double TickValue = NormalizeDouble(MarketInfo("EURUSD", MODE_TICKVALUE), 2);
   int SL = 26;////Пунктов
   double lotsShortNaVSE = NormalizeDouble(AccountBalance() / (level * Marga / 100.0 + SL * TickValue ), 2);
  }

O número de lotes não deve ser maior do que o número de lotesShortNaVSE

SL ---- é uma possível perda em sua posição aberta.

E as corretoras têm sua própria percepção de possíveis perdas.

É por isso que precisamos tirar o número Maximal de sua ou da corretora. Por exemplo, no momento, o Centro de Revendedores do par EURUSD tem uma possível perda SL = 26.

SL = MathMax(VashSLvPunktah, SLvPunktahUVashegoDillinga);
Existem outras opções?
 
rlx:


E as empresas de corretagem também têm sua própria visão sobre as possíveis perdas.

É por isso que você deve assumir o número máximo de perdas de sua empresa ou de sua corretora. Por exemplo, no momento, a corretora tem uma possível perda SL = 26 para EURUSD.

Talvez haja algumas outras variantes?


É exatamente como calcular esta visão do CD.

Mas isto é mais crítico para os comerciantes de curto prazo.

 

Isto é, por exemplo, se você tiver um stopLoss de 5 pontos, naturalmente o número de lotes abertos será calculado um lote.

Mas abrir tal posição não vai funcionar, porque as corretoras têm seu próprio Sistema de Gerenciamento de Riscos.

 
rlx:


A única coisa é como calcular esta visão do CD.

Mas isto é mais crítico para os de curto prazo.


Bom dia! Por favor, ajude. Preciso de um roteiro que estabeleça automaticamente parada e lucro durante o comércio manual. Você acha que é possível e, se existir, por favor, me dê um link.
 
Cmu4:

Não... Eu fiz como você sugeriu - a mesma coisa permanece.

Também mudei o código, dividindo separadamente os blocos de abertura e fechamento por condições. É tudo a mesma coisa. Eu não sei o que fazer agora.

Aqui está uma captura de tela do testador, EA para o testador está no trailer:

Desde que a condição MAKDak seja cumprida, as ordens também serão abertas em lotes em cada carrapato.

Acrescentar às condições
Para posições de compra: Se não houver ordem de compra no mercado, então abra-a...
Para posições de Venda: Se não houver ordem de Venda no mercado, abra-a...

E o problema será resolvido.