[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 520

 
Roger:

Em geral, acrescentei duas variáveis - uma para o nível de depósito a ser alcançado e a segunda para o número de arquivos a serem apagados. Ele funcionará apenas uma vez, então é necessário corrigir o nível para outro valor ou reiniciar o Expert Advisor.
Obrigado - agora eu vou fazer o teste. Ou não é adequado para correr no testador ?
 
alex12:
Obrigado - Vou fazer o teste agora. Ou não é adequado para a corrida de teste?

Como eu o testaria?
 
demlin:

Saudações a todos!

Favor avisar um indicador normal para determinar um apartamento, obrigado antecipadamente ))))


Eu mesmo estou testando este aqui.

Pode ser facilmente adicionado (conectado) a um Expert Advisor através do iCustom().

 
Um sistema simples para atravessar 2 vagões.
Comprar - o rápido atravessa o lento para cima.
Vender - rápido cruza-se devagar para baixo.

Fechar - sinal oposto ou arrasto. Você pode me dizer o que devo mudar no código para definir parada = 50 pips em cada abertura de posição?

extern double Lots           =   0; // лот, если 0, то динамический
extern double RiskPercentage =  70; // % от депо на лот, если динамический
extern int    FastPer        =   4;
extern int    SlowPer        =  18;
extern int    magicnumber    = 777;
extern int    TrailingStop   =  20; 
extern bool   PolLots        = true;



int prevtime;
int ticket=0;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----




   if (!IsDemo())
    {
//     Print ("Эта версия только для демо-счетов");
//     return(0);
    }   


   if(Time[0] == prevtime)
   { 

       return(0);
   }
   prevtime = Time[0];
   if(!IsTradeAllowed()) 
     {
       prevtime = Time[1];
       return(0);
     }




 int Ord=0;
 double ClLot=0;
int LotsCount=0;
   int i=0;  
   int total = OrdersTotal();   
   for(i = 0; i <= total; i++) 
     {
      if(TrailingStop>0)  
       {                 
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       if(OrderMagicNumber() == magicnumber) 
         {
         ticket=OrderTicket(); 
         ClLot=OrderLots();
         if (OrderType()==OP_BUY)
          {
           Ord=1;
          }
         else
          {
           Ord=2;
          }         
          LotsCount ++;
          TrailingStairs(OrderTicket(),TrailingStop);
         }
       }
      }
/*
 
     for(i = 0; i <= OrdersTotal(); i++) 
      {
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       if(OrderMagicNumber() == magicnumber) 
         {
         ticket=OrderTicket(); 
         ClLot=OrderLots();
         if (OrderType()==OP_BUY)
          {
           Ord=1;
          }
         else
          {
           Ord=2;
          }
         }
      } 
*/    
bool SellOp=false;
bool BuyOp=false;

double MAFast1=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,2),Digits);
double MAFast2=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,1),Digits);
double MAFast3=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,0),Digits);
double MASlow1=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,2),Digits);
double MASlow2=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,1),Digits);
double MASlow3=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,0),Digits);


      
if ((MAFast1<MASlow1)&&
    (MAFast2==MASlow2)&&
    (MAFast3>MASlow3))
{
 BuyOp=true;
}

if ((MAFast1>MASlow1)&&
    (MAFast2==MASlow2)&&
    (MAFast3<MASlow3))
{
 SellOp=true;
}



if (BuyOp)
 {
  if (Ord==2)
   {
    OrderClose(ticket,ClLot,Ask,3,Red);
   }
  if (Ord!=1)
   {
    OrderSend(Symbol(),OP_BUY,Lot(),Ask,3,0,0,"MA_Buy",magicnumber,0,Green);
   }
 }

if (SellOp)
 {
  if (Ord==1)
   {
    OrderClose(ticket,ClLot,Bid,3,Green);
   }
  if (Ord!=2)
   {
    OrderSend(Symbol(),OP_SELL,Lot(),Bid,3,0,0,"MA_Sell",magicnumber,0,Red);
   }
 }



   
//----
   return(0);
  }
//+------------------------------------------------------------------+
void TrailingStairs(int ticket,int trldistance)
   { 
    int Spred=Ask - Bid;
    if (OrderType()==OP_BUY)
      {
       if((Bid-OrderOpenPrice())>(Point*trldistance))
         {
          if(OrderStopLoss()<Bid-Point*trldistance || (OrderStopLoss()==0))
            {
             OrderModify(ticket,OrderOpenPrice(),Bid-Point*trldistance,OrderTakeProfit(),0,Green);
             if (PolLots)
             if (NormalizeDouble(OrderLots()/2,1)>MarketInfo(Symbol(), MODE_MINLOT))
               {
               OrderClose(ticket,NormalizeDouble(OrderLots()/2,1),Bid,3,Green);
               }
             else
               {
               OrderClose(ticket,OrderLots(),Bid,3,Green);
               }
            }
         }
       }
     else
       {
        if((OrderOpenPrice()-Ask)>(Point*trldistance))
          {
           if((OrderStopLoss()>(Ask+Point*trldistance)) || (OrderStopLoss()==0))
             {
              OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*trldistance,OrderTakeProfit(),0,Red);
             if (PolLots)
             if (NormalizeDouble(OrderLots()/2,1)>MarketInfo(Symbol(), MODE_MINLOT))
               {
               OrderClose(ticket,NormalizeDouble(OrderLots()/2,1),Ask,3,Green);
               }
             else
               {
               OrderClose(ticket,OrderLots(),Ask,3,Green);
               }
             }
          }
        }
    }
    
double Lot()
{
 double LotQ = Lots;

 if (Lots==0)
  {
   double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
   double minLot = MarketInfo(Symbol(), MODE_MINLOT);
   double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
   double step =   MarketInfo(Symbol(), MODE_LOTSTEP);
   double account = AccountFreeMargin();
   
   double percentage = account*RiskPercentage/100;
   
   LotQ = MathRound(percentage/margin/step)*step;
   
   if(LotQ < minLot)
   {
      LotQ = minLot;
   }
   
   if(LotQ > maxLot)
   {
      LotQ = maxLot;
   }
  } 
  return (LotQ);
  }

 
Roman.:


Eu mesmo estou testando este aqui.

Ele é facilmente adicionado (conectado) ao Expert Advisor via iCustom().

Pergunto-me, como você define seus valores extremamente baixos e extremamente altos em uma EA? Afinal, em uma área local do gráfico 0,3800 (a linha azul) era um valor extremo e correspondia a uma correção temporária, enquanto na próxima área local 0,3041 (a linha verde) tornou-se seu valor extremo e marcou uma inversão...

E o valor extremo baixo 0,4596 no primeiro longo (linha vermelha), que nada disse?

E como você determina se o valor extremo baixo do indicador indica uma correção ou inversão? Na verdade, o valor de 0,3800 no primeiro caso indicou uma correção (a linha vertical verde), e no segundo caso - o fim da tendência (a linha vertical vermelha)

E finalmente - há muitos desses extremos locais no gráfico. Afinal, durante um período de 3-5 horas, certamente haverá o valor mais baixo, e será um valor extremamente baixo para esse intervalo de tempo. Se especificarmos um certo intervalo de tempo para encontrar valores extremos indicadores, eles serão encontrados, mas... Entretanto, nas barras subseqüentes, além do período de tempo especificado, pode acontecer que o valor do indicador se torne ainda mais baixo (mais alto) e então esse valor será extremamente baixo (alto) - mas o que fazer com o valor encontrado anteriormente? Ainda mais para que o consultor especializado tome uma decisão com base nisso.

No entanto...


 
artmedia70:

Pergunto-me, como você define valores extremamente baixos e extremamente altos em seu Expert Advisor? Afinal, em uma área local do gráfico 0,3800 (a linha azul) era um valor extremo e correspondia a uma correção temporária, enquanto na próxima área local 0,3041 (a linha verde) tornou-se seu valor extremo e marcou uma inversão...

E o valor extremo baixo 0,4596 no primeiro longo (linha vermelha), que não dizia nada?

E como você determina se o indicador de valor extremamente baixo indica uma correção ou inversão? Na verdade, o valor de 0,3800 no primeiro caso indicou uma correção (a linha vertical verde), e no segundo caso - o fim da tendência (a linha vertical vermelha)

E finalmente - há muitos desses extremos locais no gráfico. Se estabelecermos um intervalo de 3-5 horas, certamente será o valor mais baixo, e será um valor extremamente baixo para esse intervalo de tempo. Se especificarmos um certo intervalo de tempo para encontrar valores extremos indicadores, ele será encontrado, mas... Entretanto, nas barras subseqüentes, além do período de tempo especificado, pode acontecer que o valor do indicador se torne ainda mais baixo (mais alto) e então esse valor será extremamente baixo (alto) - mas o que fazer com o anterior? Mais para que o Assessor Especialista tome uma decisão com base nisso.

No entanto...





Eu olho para este indicador como um filtro para entrar no mercado de tendência ou estratégia plana, ou seja, a seguinte interpretação de sua leitura aparece:

double iVAR_1 = iCustom (Symbol(),trend_period, "iVAR", n, nBars, 0, 1);                    // расчет индикатора iVAR
   

O valor do indicador abaixo de 0,5 significa que o mercado está em uma tendência.

iVAR_1 < 0.5 &&                                                            // тренд на основном ТФ   

Valores extremamente baixos geralmente precedem o fim (correção) da tendência atual - já está na figura - aqui o arrasto funciona (quando no mercado).


Valor do indicador acima de 0,5 significa uma condição de mercado plano

iVAR_1 > 0.5 && 

O valor extremamente alto muitas vezes precede o início de uma tendência significativa - veja a interpretação anterior.

O valor do indicador em torno de 0,5 significa uma situação de mercado incerta - aqui é possível usar algum "nível" de indentação (não excluo que seja redundante, ou seja pegar valor 0,5 e tudo), tanto abaixo - x, como acima - y valor 0,5 (nível base), inseri-los em variáveis externas e otimizá-los com o passo 0,02, digamos, o mesmo que a variável n - início:2 passo:1 parada:7 - não é supérfluo, eu faço isso - em breve postarei resultados no ramo Avalanche (é sistema de tendências...:-), apenas com MM por Martin... e tudo... :-)))).

 
Roman.:


Eu olho para este indicador como um filtro para entrar no mercado seja para uma tendência ou estratégia plana, ou seja, recebo a seguinte interpretação de sua leitura:

Um valor indicador abaixo de 0,5 indica uma condição de tendência de mercado -

Valores extremamente baixos frequentemente precedem o fim (correção) da tendência atual - isto já se adequa à figura - aqui o arrasto funciona (quando no mercado).


O valor do indicador acima de 0,5 significa a condição de mercado plano

O valor extremamente alto muitas vezes precede o início de uma tendência significativa - veja a interpretação anterior.

O valor do indicador em torno de 0,5 significa uma condição de mercado incerta - aqui é possível usar algum "nível" de indentação (não excluo que seja redundante, ou seja tomar valor 0,5 e tudo), tanto abaixo - x, como acima - y valor 0,5 (nível base), introduza-os em variáveis externas e optimize com o passo 0,02, digamos, o mesmo que a variável n - start:2 passo:1 stop:7 - isto não é excessivo, eu faço-o - em breve publicarei resultados na filial Lavina (é sistema de tendências...:-), apenas com MM por Martin... e tudo... :-)))).

Não gosto da otimização: a essência é um ajuste... E nunca otimizo os parâmetros dos meus bebês... Eu tento escolher os parâmetros necessários para diferentes condições de mercado.

Mas obrigado pelo esclarecimento... :) Sinceramente - apanhar o poste acima era uma pedrinha na direção do peru... :)

 

Boa tarde!

Tenho uma pergunta a fazer. O Expert Advisor tem uma função que escreve as negociações em um arquivo csv, mas descobri um problema que ocorre quando ativo/desativa(VERDADEIRO/FALSO) a opção do sistema de gerenciamento de dinheiro nos parâmetros do Expert Advisor. Por exemplo, logo após a compilação do arquivo fonte, tudo funciona corretamente e as negociações são escritas no arquivo como pretendido. A figura abaixo ilustra os dados escritos corretamente:

Então, no testador, habilito a opção do sistema de gerenciamento de dinheiro nos parâmetros do Expert Advisor, executo o teste, mas os dados não são escritos corretamente no arquivo. A figura abaixo mostra duas variantes para comparação. A da esquerda está correta (como acima) e a da direita não está correta:

Não fui capaz de descobrir por conta própria o que poderia ser isto, mas encontrei o seguinte. Se eu também ativar/desativar a opção do sistema de gerenciamento de dinheiro e compilar o arquivo fonte novamente antes de iniciar o teste, tudo é escrito corretamente.

Você pode me dizer qual poderia ser o problema?

 
artmedia70:

Não gosto da otimização: a essência é adequada... E nunca otimizo os parâmetros de meus produtos... Eu tento deixá-los escolher os parâmetros necessários para diferentes condições de mercado.

Embora, obrigado pelo esclarecimento... :) Sinceramente - ir com o poste acima era uma pedrinha na direção de um peru... :)


Estou vendo... Se você estiver interessado, aqui está uma coisa semelhante (no trailer). Veja também aqui (linha inteira) - háum tratamento acima/abaixo 0,6 e aqui(páginas seletivas).

Arquivos anexados:
 
Roman.:


Eu mesmo estou testando este aqui.

Facilmente adicionado (conectado) ao EA via iCustom().

Obrigado, baixei-o, vou testá-lo em meu Consultor Especialista