História
O 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