Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 56

 

Eu ainda estou refinando:

se a condição for verdadeira

ordem em aberto 1

se o preço mudou para onde deveria ou não

ordem em aberto 2

LastLot= pedido 2 (ou número maior)

LastPrice= pedido2 (ou número maior)

Se o preço mudou ou não para onde deveria ter mudado...

LastLot= pedido 3 (ou número maior)

LastPrice= pedido 3 (ou número maior)

O problema é que a última (ou não) ordem estará sempre entre uma StopLoss e uma TakeOut, o que significa que ela não será reinicializada quando as outras fecharem porque a própria ordem ainda estará lá. Como ligá-lo aos outros se não soubermos o número de pedidos?

O mecanismo de ligar o último primeiro ou penúltimo aos outros provou ser ineficiente, uma vez que seu número muda junto com os números.

O resultado deve ser algo como "se alguma ordem da série em questão tiver sido fechada, feche todas as outras".

Verificação em série - a primeira ordem da direção atual (outra ordem não será aberta) - ou um identificador adicional ou alguns outros métodos de ligação devem ser usados aqui. A chave - a primeira ordem é aberta de acordo com as condições, o resto das ordens são auxiliares.

alguma reflexão?

 
trader781:

Eu ainda estou refinando:

se a condição for verdadeira

ordem em aberto 1

se o preço mudou para onde deveria ou não

ordem em aberto 2

LastLot= pedido 2 (ou número maior)

LastPrice= pedido2 (ou número maior)

Se o preço mudou ou não para onde deveria ter mudado...

LastLot= pedido 3 (ou número maior)

LastPrice= pedido 3 (ou número maior)

O problema é que a última (ou não) ordem estará sempre entre uma StopLoss e uma TakeOut, o que significa que ela não será reinicializada quando as outras fecharem porque a própria ordem ainda estará lá. Como ligá-lo aos outros se não soubermos o número de pedidos?

O mecanismo de ligar o último primeiro ou penúltimo aos outros provou ser ineficiente, uma vez que seu número muda junto com os números.

O resultado deve ser algo como "se alguma ordem da série em questão foi fechada, feche todas as outras".

Verificação em série - a primeira ordem da direção atual (outra ordem não será aberta) - ou um identificador adicional ou alguns outros métodos de ligação devem ser usados aqui. A chave - a primeira ordem é aberta de acordo com as condições, o resto das ordens são auxiliares.

Alguma idéia?

Não está claro. Tente expressar seus pensamentos de forma mais clara.

Aqui o temos:"Se o preço seguir o caminho certo ou não, devemos abrir a ordem 2" - como devemos entender quedevemos abrir a ordem 2 em qualquer caso?

E vamos ter cada vez mais "ou então".

E se não quisermos ter perguntas como"Como ligá-lo aos pedidos restantes quando o valor do preço é desconhecido", devemos descobrir primeiro o valor.

 
Vitalie Postolache:

É confuso, incompreensível. Tente deixar seus pensamentos mais claros.

Isto"se o preço se moveu na direção certa ou não - para abrir ordem2" - como você entende que em qualquer caso"para abrir ordem2"?

E vamos ter cada vez mais "ou então".

E se não quisermos entrar em questões como"Como conectar com os pedidos restantes se não soubermos o valor", devemos primeiro descobrir o valor.

OK, com números

EURUSD=1.10000

um comando para abrir uma ordem de compra de acordo com o TP (já escrito)

se EURUSD=1.10200 nós damos uma ordem de compra (já escrita)

se EURUSD=1,09800 para "comprar" (já está escrito)

e assim por diante com uma etapa de 200

se qualquer uma das ordens for fechada (as paradas e aquisições são definidas, mas não em todas elas)

Feche a grade inteira

procurando uma maneira de identificar a grade
 
trader781:

OK, com números

EURUSD=1.10000

comando para abrir uma ordem de compra de acordo com a ordem atual (já escrita)

se EURUSD=1.10200 para adicionar ao pedido de compra (já escrito)

se EURUSD=1,09800 para "comprar" (já está escrito)

e assim por diante com um passo de 200

se alguma das ordens for encerrada (paradas e aquisições já estão definidas)

fechar toda a grade

buscando uma maneira de identificar a grade
Você pode adicionar comentários com o número do pedido. E, se a série de pedidos for de um tipo, podemos apenas recalculá-los e fixar a quantidade.
 
Vitalie Postolache:
Comentários com o número do pedido podem ser adicionados. E se toda a série de pedidos de um tipo - então eles devem simplesmente recalculá-los e fixar a quantidade.

Eu estava pensando em comentários, mas a julgar pelo feedback, o chef acha que eles não são comestíveis e os elimina ou os muda para os seus próprios comentários

E quanto à contagem, então eu tenho que contar e registrar o número ao adicionar outro?

 
trader781:

e sobre a contagem, eu tenho que contar e registrar a quantidade quando eu adicionar outra?

Sim. E se o número diminuiu desde a última vez - feche todos os demais.

Você também pode monitorar as ordens fechadas no histórico. E feche a série quando surgir uma nova ordem que atenda às características especificadas.

Você também não pode definir TP/SL na ordem, mas calcular o TP/SL total no Expert Advisor para toda a série. Utilize-os para fechar a série. As vantagens - a corretora não vê os níveis de ruptura, e o problema de encontrar a série permanece se um TP ou um SL tiver acionado em um pedido.
 
Saudações ...Feliz Ano Novo ...Desejando a você tudo de melhor e prosperidade ...Neste código por favor mude o cálculo do lote foi realizado com a máxima conta de alavancagem possível
//+------------------------------------------------------------------+
double volume(string symbol,double risk,double sl)
  {
   double lot=0.0;
   double procent=0.0;
   double balans=0.0;
   double tc = SymbolInfoDouble(symbol,SYMBOL_TRADE_CONTRACT_SIZE);
   double tv = SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE);
   double ts=SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE);
   double point=SymbolInfoDouble(symbol,SYMBOL_POINT);

   if(Type_Balanse==Balance) balans=AccountInfoDouble(ACCOUNT_BALANCE);
   if(Type_Balanse==Equity) balans=AccountInfoDouble(ACCOUNT_EQUITY);
   if(Type_Balanse==FreeMargin) balans=AccountInfoDouble(ACCOUNT_FREEMARGIN);

   procent=(balans/100.0)*risk;

   switch((int)MarketInfo(symbol,MODE_PROFITCALCMODE))
     {
      case 0: if(sl!=0 && tv!=0) lot=procent/(sl*tv);break;
      case 1: if(sl!=0 && point!=0 && tc!=0) lot=procent/(sl*point*tc);break;
      case 2: if(sl!=0 && point!=0 && tv!=0 && ts!=0) lot=procent/(sl*point*(tv/ts));break;
     }
   return(NormalizeVolume(symbol,lot));
  }
 
Como prescrever no Expert Advisor o cálculo automático do lote, dependendo da alavancagem ...Digamos a alavancagem 1:50 depósito 3000.
 
Movlat Baghiyev:
OK, deixe-me fazer-lhe uma pergunta simples. Como faço para configurar o EA para calcular automaticamente o lote dependendo da alavancagem. Digamos que a alavancagem é 1:50, o depósito é 3000...

Experimente assim:

void OnTick()
{
  Comment( cLot(100) );
}
//===============================================================================================
//------------------------------------ Расчет лота по риску ------------------------------------+
//===============================================================================================
double cLot(double Percent=0) {
double Free=AccountFreeMargin(),
        One_Lot=MarketInfo(_Symbol,MODE_MARGINREQUIRED),
        Min_Lot=MarketInfo(_Symbol,MODE_MINLOT),
        cStep=MarketInfo(_Symbol,MODE_LOTSTEP),
        Lots_New=0;
if(Percent > 100) {
    Percent = 100;
  }
  if(Percent == 0) {
    Lots_New = 0;
     return(0);
   } else {
    Lots_New = MathFloor(Free*Percent/100/One_Lot/cStep)*cStep;
   }
  if(Lots_New < Min_Lot) {
    Lots_New = Min_Lot;
  }
  if(Lots_New*One_Lot > Free) {
    return(0);
  }
   return(NormalizeDouble(Lots_New,LotDigit()));
}
//===============================================================================================
//-------------------- Кол-во знаков после точки в значении торгового лота ---------------------+
//===============================================================================================
int LotDigit(){
  double lotStep = MarketInfo(_Symbol,MODE_LOTSTEP);
return((int)MathCeil(MathAbs(MathLog(lotStep)/MathLog(10))));
}
 
Desculpe, eu preciso de uma escolha de risco %. Eu só preciso abrir o maior lote possível de uma vez em incrementos de 0,01