Especialistas: EURUSD breakout

 

EURUSD breakout:

Negociação segundo dois sessões de negociação com configuração de seu início. Stop Loss. Take Profit.

EURUSD breakout

Autor: Vladimir Karputov

 
<br/ translate="no">

Não consigo descobrir em qual estratégia o algoritmo se baseia, os parâmetros de entrada são apenas condições de negociação...?

 
Alex_Pushkin:

Não consigo descobrir em qual estratégia o algoritmo se baseia, os parâmetros de entrada são apenas condições de negociação...?


A estratégia em si está escrita nestas linhas:

//--- pode ser uma boa ideia evitar também os dias de NFP, a primeira quinta-feira de qualquer mês. 
   if((!session_found) && (str1.hour==Start_hour_US_session))
     {
      //--- pela primeira vez, calcule os máximos e mínimos da sessão da UE.
      TopRange=iHighest(m_symbol.Name(),Period(),MODE_HIGH,24,1); // 24 barras M15 durante a sessão da UE
      LowRange=iLowest(m_symbol.Name(),Period(),MODE_LOW,24,1);  // 24 barras M15 durante a sessão da UE
      //---
      if(TopRange<=0.0 || LowRange<=0.0)
         return;
      //---
      if((TopRange-LowRange)<=ExtSmallEUSessionPips)
         small_session=true;
      else
         small_session=false;
      session_found=true;
      string text=(small_session)?"true":"false";
      Print("Identified new EU session + ["+
            DoubleToString(LowRange,m_symbol.Digits())+","+
            DoubleToString(TopRange,m_symbol.Digits())+"]"+
            " DayOfYear()="+IntegerToString(str1.day_of_year)+" small? "+text);
     }

Temos um parâmetro de entrada"Start_hour_US_session" - assim que encontramos uma correspondência da hora atual (comparamos apenas as horas) com esse parâmetro, começamos a procurar o valor mais alto de preços máximos para o período de 24 barras e o valor mais baixo de preços mínimos para o período de 24 barras. Se a diferença desses preços for menor ou igual ao parâmetro de entrada"Small EU Session (in pips)", isso significa que uma"sessão pequena " (em pips) foi detectada. - Então, uma "sessão pequena" (com volatilidade pequena) -"small_session" - foi detectada.



Quando estamos dentro da "sessão dos EUA" e uma "sessão pequena" (com pequena volatilidade) é detectada - "small_session"

   if(session_found && small_session && 
      (str1.hour>=Start_hour_US_session) && (str1.hour<End_hour_US_session)) // Dentro do horário da sessão nos EUA?
     {
      //--- Calcular o intervalo da sessão da UE
      //--- Print("Am in US session.... small_session, bought, sold = " + small_session+bought+sold); 
      //--- Imprimir("TopRange = " + TopRange + "LowRange = " + LowRange); 
      int h=str1.hour;
      int m=str1.min;
      if(h>Start_hour_EU_session+5 && h<Start_hour_EU_session+10)
        {//--- pelo menos uma barra de sessão dos EUA deve ser concluída
         //--- Imprimir("Poderia estar comprando/vendendo... "+h+": "+m); 
         double low=iLow(1);
         double high=iHigh(1);
         //---
         if(low==0.0 || high==0.0)
            return;
         //---
         if(!RefreshRates())
            return;
         if((!bought) && (low>(TopRange+Point()*3)))
           {
            if(OpenBuy(m_symbol.Bid()-ExtStopLoss,m_symbol.Ask()+ExtTakeProfit))
               bought=true;
           }
         if((!sold) && (high<(LowRange-Point()*3)))
           {
            if(OpenSell(m_symbol.Ask()+ExtStopLoss,m_symbol.Bid()-ExtTakeProfit))
               sold=true;
           }
        } // fim se estiver no segundo horário dos EUA. 
     }// fim da sessão pequena

esperamos até estarmos dentro da "sessão da UE" e obtemos os valores mínimo e máximo da primeira barra.


Condição para abertura de COMPRA: se nenhuma posição de COMPRA tiver sido aberta nesse dia e a mínima da barra número 1 for MAIOR do que o valor mais alto dos preços máximos para o período de 24 barras na "US_session":

         if((!bought) && (low>(TopRange+Point()*3)))
           {
            if(OpenBuy(m_symbol.Bid()-ExtStopLoss,m_symbol.Ask()+ExtTakeProfit))
               bought=true;
           }


Condição para abrir VENDA: se nenhuma posição de VENDA tiver sido aberta nesse dia e a Máxima da barra número 1 for MENOR do que o valor mais baixo dos preços mínimos para o período de 24 barras em "US_session":

         if((!sold) && (high<(LowRange-Point()*3)))
           {
            if(OpenSell(m_symbol.Ask()+ExtStopLoss,m_symbol.Bid()-ExtTakeProfit))
               sold=true;
           }

ds