quinta-feira, 20 de janeiro de 2011

Parabolic Sar Expert Adviser(EA)



História


Parabolic SAR foi desenvolvido por Welles Wilder, o criador do RSI e DMI, o Parabolic SAR define trailing stops para posições longas ou curtas. Também referido como o indicador stop-and-reversal (SAR significa Stop And Reversal, parar e inverter em Português), o Parabolic SAR é mais popular pela definição de stops do que para estabelecer direcção ou tendência. Wilder recomendava que se estabelecesse primeiro a tendência, e em seguida, negociar com o Parabolic SAR na direcção da tendência. Se a tendência é ascendente, comprar quando o indicador se move abaixo do preço. Se a tendência é descendente, vender quando o indicador se move acima do preço.


Cálculo


A fórmula é bastante complexa e está para além do âmbito desta definição, mas a interpretação é relativamente simples. As linhas pontilhadas abaixo do preço estabelecem a trailing stop para uma posição longa e as linhas acima estabelecem a trailing stop para uma posição curta. No início do negócio, o Parabolic SAR define uma maior distancia entre o preço e a trailing stop. Como o desenvolvimento do negócio, a distância entre o preço e o indicador vai diminuir, definindo uma trailing stop mais curta à medida que o preço se move numa direcção favorável.
Existem duas variáveis: o passo (step) e o passo máximo (maximum step). Quanto maior o passo definido, mais sensível o indicador será a alterações de preço. Se o passo definido é demasiado alto, o indicador irá oscilar acima e abaixo do preço muito frequentemente, tornando difícil a sua interpretação. O passo máximo controla o ajuste do SAR conforme o preço se move. Quanto menor for o valor do passo máximo definido, mais distante do preço estará o trailing stop. Wilder recomenda a seguinte configuração:
  • Passo: 0.02
  • Passo máximo: 0.20
O Parabolic SAR funciona melhor durante períodos com tendências bem definidas, que Wilder estima que ocorram cerca de 30% do tempo. Assim, o trader deverá primeiro determinar se o mercado está tendência através do uso outros indicadores, tais como o ADX line de Wilder.

Abaixo, segue o código fonte em mql4 para quem quiser testar e aperfeiçoar um Expert Adviser(EA); criado a partir do conceito do indicador Parabolic SAR .
Ressalto que o EA esta com um "scalper" adaptado.

//+------------------------------------------------------------------+
//|                                                      aSeiran.mq4                            |
//|                                                  Konrad                                       |
//|                             http://forexblogbrazil.blogspot.com/                   |
//+------------------------------------------------------------------+

#property link      "http://forexblogbrazil.blogspot.com"


#include <stdlib.mqh>
extern int     Slippage          = 1;
extern string i_________ = "Safe_mode option will only open 1 trade per trend";
extern bool Safe_Mode = FALSE;
extern string i________ = "**************************************************";
extern double TakeProfit = 10.0;
extern double StopLoss = 0.0;
extern double Lots = 0.1;
extern string i_______ = "Maximum number of trade in uptrend or downtrend";
extern int Max_Trade_Per_Trend = 2;
extern string i______ = "*****Set Scalper_Mode=True to use scalping feature*******";
extern bool Scalper_Mode = FALSE;
extern int Scalp_tp = 5;
extern string i_____ = "*****Set Use_Trailing_True=True to use trailing stop feature*******";
extern bool Use_Trailing_Stop = FALSE;
extern string i____ = "*****If you free margin fall below Minimum_Margin*******";
extern string i___ = "*****this EA will not open new trade*******";
extern double Minimum_Margin = 100.0;
double g_free_magrin_184;
double g_icustom_192;
double g_icustom_200;
double g_icustom_208;
double g_icustom_216;
double g_icustom_224;
double g_icustom_240;
double g_icustom_248;
extern int Magic = 93011;
int gi_260 = 300;
double g_bid_264;
double g_price_272;
double g_price_280;
double g_price_304;
bool gi_unused_312 = FALSE;
bool gi_unused_316 = FALSE;
int g_count_320 = 0;
int g_count_324 = 0;
int g_error_344;
string gs_348;

int init() {
   return (0);
}

int deinit() {
   return (0);
}

int start() {
   int l_cmd_8;
   double l_ord_open_price_28;
   double l_price_36;
   g_free_magrin_184 = AccountFreeMargin();
   double l_ord_open_price_20 = 0;
   int l_count_4 = 0;
   int li_unused_12 = 0;
   int li_unused_16 = 0;
   for (int l_pos_0 = 0; l_pos_0 < OrdersTotal(); l_pos_0++) {
      OrderSelect(l_pos_0, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
         l_count_4++;
         l_ord_open_price_20 = OrderOpenPrice();
         l_cmd_8 = OrderType();
         if (Scalper_Mode) {
            if (l_cmd_8 == OP_BUY && Bid - OrderOpenPrice() > Scalp_tp * Point) {
               OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 1, Blue);
               return (0);
            }
            if (l_cmd_8 == OP_SELL && OrderOpenPrice() - Ask > Scalp_tp * Point) {
               OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 1, Red);
               return (0);
            }
         }
      }
   }     
     if ((iSAR(NULL, 0, 0.007, 0.2, 0)>iClose(NULL,0,0))&&(iSAR(NULL, 0, 0.007, 0.2, 1)<iClose(NULL,0,1))) //Signal Sell
 {
             
               if (g_count_324 < Max_Trade_Per_Trend) {
                  OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+StopLoss*Point,0,"misakas2v1.3b", Magic, 0, Red);
                  g_count_324++;
                  g_count_320 = 0;
                  return (0);
               }
         }
      
      if ((iSAR(NULL, 0, 0.003, 0.2, 0)<iClose(NULL,0,0))&&(iSAR(NULL, 0, 0.003, 0.2, 1)>iClose(NULL,0,1))) //Signal Buy
      {
            
               
               if (g_count_320 < Max_Trade_Per_Trend ) {
               OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-StopLoss*Point,0,"misakas2v1.3b", Magic, 0, Red);
                  g_count_320++;
                  g_count_324 = 0;
                  return (0);
               }
           
  
}
}




Nenhum comentário:

Postar um comentário