/*-----------------------------+ | | | Shared by www.Aptrafx.com | | | +------------------------------*/ #property copyright "Copyright 2005, Alberto Mengozzi - Menalbi" #property link "alberto.mengozzi@gmail.com" #property show_inputs extern double Lots=0.1; extern bool AccountIsReal = False; int var_80 = 0; int var_84 = 327142; extern int PassWord = 1111; extern int ProfileFactor = 2; extern bool CloseOpenCycle = False; extern bool CloseOpenFriday = False; extern int ToHourFriday = 10; double var_108 = 15; int var_116 = 31; bool var_120 = False; double var_124 = 20; double var_132 = 70; int var_140 = -1; int var_144 = -1; int var_148 = -1; int var_152 = -1; int var_156 = -1; int var_160 = -1; string var_164 = "0123Patterns"; string var_172 = "Version 3.12"; string var_180 = ""; string var_188 = "DEMO"; string var_196 = "REAL-TIME"; string var_204 = "Copyright © 2005, Alberto Mengozzi"; string var_212 = "alberto.mengozzi@gmail.com"; string var_220 = "http://br.groups.yahoo.com/group/0123PatternsBRA/"; string var_228 = "StrategyBuilder FX, LLC"; int var_236 = 3; bool var_240 = True; int var_244 = 0; int var_248 = 23; bool var_252 = True; string var_256 = "good.wav"; bool var_264 = True; double var_268 = 0; bool var_276 = True; bool var_280 = True; double var_284 = 5; double var_292 = 6; double var_300 = 20; double var_308 = 0; double var_316 = 1; double var_324 = 0; double var_332 = 0; double var_340 = 0; double var_348 = 0; double var_356 = 0; bool var_364 = True; int var_368 = 21; int var_372 = 105; double var_376; double var_384; double var_392; double var_400; double var_408; double var_416; double var_424; double var_432; //+------------------------------------------------------------------+ int init() { return(0); } //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ int start() { int var_start_0; double var_start_4; double var_start_12; double var_start_20; double var_start_28; double var_start_36; double var_start_44; double var_start_52; double var_start_60; double var_start_68; double var_start_76; double var_start_84; int var_start_92; int var_start_96; int var_start_100; int var_start_104; int var_start_108; int var_start_112; double var_start_116; double var_start_124; double arr_start_132[]; int var_start_136; int var_start_140; int var_start_144; double var_start_148; double var_start_156; double var_start_164; int var_start_172; int var_start_176; bool var_start_180; bool var_start_184; double var_start_188; /*[ if (!AccountIsReal) { if (var_84 != AccountNumber()) { Alert("ERROR: Operações na conta: " + AccountNumber() + "","\n","NÃO ESTÃO HABILITADAS!","\n","Tecle F7 e insira o número correto."); return(0); } if (!IsDemo()) { Alert("ERROR: Este TS ",var_164," não está habilitado ","\n","para a conta REAL: " + AccountNumber() + "","\n","Informações: " + var_212 + ""); return(0); } var_180 = var_188; } if (AccountIsReal) { if (var_80 != AccountNumber()) { Alert("ERROR: Operações na conta: " + AccountNumber() + "","\n","NÃO ESTÃO HABILITADAS!","\n","Tecle F7 e insira o número correto."); return(0); } if (IsDemo()) { Alert("ERROR: Este TS ",var_164," não está habilitado ","\n","para a conta DEMO: " + AccountNumber() + "","\n","Informações: " + var_212 + ""); return(0); } var_180 = var_196; } if (PassWord != 1011) { Alert("ERROR: Você não inseriu o PASSWORD correto!!!","\n","Solicite-o no Grupo Yahoo! - ",var_220,"","\n","ou pelo e-mail - ",var_212,""); return(0); } if (var_228 != AccountCompany()) { Alert("ERROR: Este TS ",var_164," só trabalha com ","\n","",var_228,"."); return(0); } if (var_120) { if (ProfileFactor == 1923) { var_392 = 1.0; if (MathAbs(CurTime() - var_332) > var_316 * 43200.0) { var_332 = CurTime(); Alert("ATENÇÃO: ProfileFactor = 1923 \n Voce pode PERDER ate \n 80% do SALDO INICIAL.\n Voce esta operando no \n ProfileFactor SUPER-AGRESSIVO!!!","\n","Tenha em mente que ele e \n TREMENDAMENTE ARRISCADO!!!"); } } } if (ProfileFactor == 0) { if (MathAbs(CurTime() - var_332) > var_316 * 86400.0) { var_332 = CurTime(); Alert("ATENÇÃO: ProfileFactor = 0\n Você está operando no ProfileFactor AGRESSIVO!!!","\n","Tenha em mente que ele é muito ARRISCADO!!!"); } } if (Period() != 240) { Alert("ERROR: O TS ",var_164," está habilitado somente para gráficos de 4 HORAS."); return(0); } if (var_264) { var_start_0 = var_116 - DayOfYear(); if ((var_start_0 <= 5) && (var_start_0 > 0)) { if (MathAbs(CurTime() - var_324) > var_316 * var_start_0 * 3600.0) { var_324 = CurTime(); Alert("ATENÇÃO: Falta(m) ",var_start_0," dia(s)","\n"," para encerrar o TS ",var_164,"."); } } if (var_start_0 == 0) { if (MathAbs(CurTime() - var_324) > var_316 * 900.0) { var_324 = CurTime(); Alert("ATENÇÃO: O seu TS ",var_164," EXPIRA HOJE."); } } if (var_start_0 < 0) { if (!ExistPositions()) { Comment("ATENÇÃO!!!\n O TS " + var_164 + " - " + var_172 + " - " + var_180 + " - EXPIROU!!!!!"); return(0); } if (ExistPositions()) { if (MathAbs(CurTime() - var_324) > var_316 * 600.0) { var_324 = CurTime(); Alert("ATENÇÃO: \n O TS " + var_164 + " - " + var_172 + " - " + var_180 + " - EXPIROU!!!!! \n Agora encerrando todas as operações \n para que possa REMOVER \n O TS " + var_164 + " - " + var_172 + " - " + var_180 + "."); } } } } if (Symbol() != "EURUSD") { if (Symbol() != "EURUSDm") { Alert("ERROR: O TS ",var_164," está habilitado\n somente para as paridades EURUSD ou EURUSDm!!!"); return(0); } } ]*/ if (!(((((var_108 == 1000) || (var_108 == 10)) || (var_108 == 15)) || (var_108 == 20)) || (var_108 == 25))) { Alert("ERROR: INVÁLIDO o valor do TakeProfit que você escolheu.","\n","Valores VÁLIDOS (10, 15, 20, 25 ou 1000).","\n","Aperte a tecla F7 e coloque um dos três valores citados acima."); return(0); } if (ProfileFactor == 0) var_392 = 0.7; if (ProfileFactor == 1) var_392 = 0.5; if (ProfileFactor == 2) var_392 = 0.3; if (ProfileFactor == 3) var_392 = 0.2; if (!(((((ProfileFactor == 1923) || (ProfileFactor == 0)) || (ProfileFactor == 1)) || (ProfileFactor == 2)) || (ProfileFactor == 3))) { Alert("ERROR: Valores VÁLIDOS para o PROFILEFACTOR:","\n","(Agressivo = 0; Moderado = 1; Conservador = 2; Super-Conservador = 3)"); return(0); } if (AccountLeverage() == 100) var_400 = 0.003; if (AccountLeverage() == 200) var_400 = 0.05; if (!(AccountLeverage() == 200)) { Alert("ERROR: Leverage VÁLIDA, somente 1:200 Conta Mini"); return(0); } if (Bars < 200) { Alert("ERROR: Número de barras menor que 200"); return(0); } if (MathAbs(CurTime() - var_356) > var_316 * 900.0) { var_356 = CurTime(); RefreshRates(); Print("ATENÇÃO: Fiz um RefreshRates() na conta."); } if (CloseOpenCycle) { if (!ExistPositions()) { Comment("ATENÇÃO!!!\n Fechamos todas as operações.\n Você já pode desligar o TS.\n E se quiser, também fechar a plataforma MT4.\n Para continuar operando, mude o \n CloseOpenCycle para False."); return(0); } if (ExistPositions()) { if (MathAbs(CurTime() - var_340) > var_316 * 3600.0) { var_340 = CurTime(); Alert("ATENÇÃO: \n Encerrando todas as operações \n para que possa desligar \n o TS e fechar a plataforma."); } } } if (CloseOpenFriday && (DayOfWeek() == 5) && (Hour() >= ToHourFriday)) { if (!ExistPositions()) { Comment("ATENÇÃO!!!\n Fechamos todas as operações.\n Você já pode desligar o TS.\n E se quiser, também fechar a plataforma MT4.\n Bom final de semana!!!"); return(0); } if (ExistPositions()) { if (MathAbs(CurTime() - var_348) > var_316 * 3600.0) { var_348 = CurTime(); Alert("ATENÇÃO: \n Encerrando todas as operações \n para que possa desligar \n o TS e fechar a plataforma \n no final de semana."); } } } if (!AccountIsReal) { if (!ExistPositions()) { var_376 = MathRound(AccountEquity()); var_384 = MathRound(AccountBalance()); var_376 = var_376; var_416 = FileOpen("initialdata.dat",FILE_BIN|FILE_WRITE); if (var_416 < 1.0) { Comment("can't open file error-",GetLastError()); return(0); } FileWriteDouble(var_416,var_376,8); FileClose(var_416); } if (ExistPositions()) { var_416 = FileOpen("initialdata.dat",FILE_BIN); if (var_416 > 0.0) { var_376 = FileReadDouble(var_416,8); FileClose(var_416); } } } if (AccountIsReal) { if (!ExistPositions()) { var_376 = MathRound(AccountEquity()); var_384 = MathRound(AccountBalance()); var_376 = var_376; var_416 = FileOpen("initialdatareal.dat",FILE_BIN|FILE_WRITE); if (var_416 < 1.0) { Comment("can't open file error-",GetLastError()); return(0); } FileWriteDouble(var_416,var_376,8); FileClose(var_416); } if (ExistPositions()) { var_416 = FileOpen("initialdatareal.dat",FILE_BIN); if (var_416 > 0.0) { var_376 = FileReadDouble(var_416,8); FileClose(var_416); } } } //var_408 = NormalizeDouble(var_376 * 0.01 * var_400 * var_392,2); var_start_4 = (Ask - Bid) / Point; if (iClose(NULL,PERIOD_M5,0) >= iMA(NULL,PERIOD_M5,var_368,0,MODE_EMA,PRICE_CLOSE,0)) var_start_12 = MathRound((iHigh(NULL,PERIOD_M5,0) - iMA(NULL,PERIOD_M5,var_368,0,MODE_EMA,PRICE_CLOSE,0)) / Point); else var_start_12 = MathRound((iLow(NULL,PERIOD_M5,0) - iMA(NULL,PERIOD_M5,var_368,0,MODE_EMA,PRICE_CLOSE,0)) / Point); if (iClose(NULL,PERIOD_M5,1) >= iMA(NULL,PERIOD_M5,var_368,0,MODE_EMA,PRICE_CLOSE,1)) var_start_20 = MathRound((iHigh(NULL,PERIOD_M5,1) - iMA(NULL,PERIOD_M5,var_368,0,MODE_EMA,PRICE_CLOSE,1)) / Point); else var_start_20 = MathRound((iLow(NULL,PERIOD_M5,1) - iMA(NULL,PERIOD_M5,var_368,0,MODE_EMA,PRICE_CLOSE,1)) / Point); if (iClose(NULL,PERIOD_M5,2) >= iMA(NULL,PERIOD_M5,var_368,0,MODE_EMA,PRICE_CLOSE,2)) var_start_28 = MathRound((iHigh(NULL,PERIOD_M5,2) - iMA(NULL,PERIOD_M5,var_368,0,MODE_EMA,PRICE_CLOSE,2)) / Point); else var_start_28 = MathRound((iLow(NULL,PERIOD_M5,2) - iMA(NULL,PERIOD_M5,var_368,0,MODE_EMA,PRICE_CLOSE,2)) / Point); if (iClose(NULL,PERIOD_M5,3) >= iMA(NULL,PERIOD_M5,var_368,0,MODE_EMA,PRICE_CLOSE,3)) var_start_36 = MathRound((iHigh(NULL,PERIOD_M5,3) - iMA(NULL,PERIOD_M5,var_368,0,MODE_EMA,PRICE_CLOSE,3)) / Point); else var_start_36 = MathRound((iLow(NULL,PERIOD_M5,3) - iMA(NULL,PERIOD_M5,var_368,0,MODE_EMA,PRICE_CLOSE,3)) / Point); if (iClose(NULL,PERIOD_M5,4) >= iMA(NULL,PERIOD_M5,var_368,0,MODE_EMA,PRICE_CLOSE,4)) var_start_44 = MathRound((iHigh(NULL,PERIOD_M5,4) - iMA(NULL,PERIOD_M5,var_368,0,MODE_EMA,PRICE_CLOSE,4)) / Point); else var_start_44 = MathRound((iLow(NULL,PERIOD_M5,4) - iMA(NULL,PERIOD_M5,var_368,0,MODE_EMA,PRICE_CLOSE,4)) / Point); if (iClose(NULL,PERIOD_M5,0) >= iMA(NULL,PERIOD_M5,var_372,0,MODE_EMA,PRICE_CLOSE,0)) var_start_52 = MathRound((iHigh(NULL,PERIOD_M5,0) - iMA(NULL,PERIOD_M5,var_372,0,MODE_EMA,PRICE_CLOSE,0)) / Point); else var_start_52 = MathRound((iLow(NULL,PERIOD_M5,0) - iMA(NULL,PERIOD_M5,var_372,0,MODE_EMA,PRICE_CLOSE,0)) / Point); if (iClose(NULL,PERIOD_M5,1) >= iMA(NULL,PERIOD_M5,var_372,0,MODE_EMA,PRICE_CLOSE,1)) var_start_60 = MathRound((iHigh(NULL,PERIOD_M5,1) - iMA(NULL,PERIOD_M5,var_372,0,MODE_EMA,PRICE_CLOSE,1)) / Point); else var_start_60 = MathRound((iLow(NULL,PERIOD_M5,1) - iMA(NULL,PERIOD_M5,var_372,0,MODE_EMA,PRICE_CLOSE,1)) / Point); if (iClose(NULL,PERIOD_M5,2) >= iMA(NULL,PERIOD_M5,var_372,0,MODE_EMA,PRICE_CLOSE,2)) var_start_68 = MathRound((iHigh(NULL,PERIOD_M5,2) - iMA(NULL,PERIOD_M5,var_372,0,MODE_EMA,PRICE_CLOSE,2)) / Point); else var_start_68 = MathRound((iLow(NULL,PERIOD_M5,2) - iMA(NULL,PERIOD_M5,var_372,0,MODE_EMA,PRICE_CLOSE,2)) / Point); if (iClose(NULL,PERIOD_M5,3) >= iMA(NULL,PERIOD_M5,var_372,0,MODE_EMA,PRICE_CLOSE,3)) var_start_76 = MathRound((iHigh(NULL,PERIOD_M5,3) - iMA(NULL,PERIOD_M5,var_372,0,MODE_EMA,PRICE_CLOSE,3)) / Point); else var_start_76 = MathRound((iLow(NULL,PERIOD_M5,3) - iMA(NULL,PERIOD_M5,var_372,0,MODE_EMA,PRICE_CLOSE,3)) / Point); if (iClose(NULL,PERIOD_M5,4) >= iMA(NULL,PERIOD_M5,var_372,0,MODE_EMA,PRICE_CLOSE,4)) var_start_84 = MathRound((iHigh(NULL,PERIOD_M5,4) - iMA(NULL,PERIOD_M5,var_372,0,MODE_EMA,PRICE_CLOSE,4)) / Point); else var_start_84 = MathRound((iLow(NULL,PERIOD_M5,4) - iMA(NULL,PERIOD_M5,var_372,0,MODE_EMA,PRICE_CLOSE,4)) / Point); var_start_136 = IndicatorCounted(); var_start_140 = 1; for (var_start_92 = 300; var_start_92 >= 0; var_start_92--) { if (iClose(NULL,PERIOD_M5,var_start_92) >= iMA(NULL,PERIOD_M5,var_372,0,MODE_EMA,PRICE_CLOSE,var_start_92)) arr_start_132[var_start_92] = MathRound((iHigh(NULL,PERIOD_M5,var_start_92) - iMA(NULL,PERIOD_M5,var_372,0,MODE_EMA,PRICE_CLOSE,var_start_92)) / Point); else arr_start_132[var_start_92] = MathRound((iLow(NULL,PERIOD_M5,var_start_92) - iMA(NULL,PERIOD_M5,var_372,0,MODE_EMA,PRICE_CLOSE,var_start_92)) / Point); } var_start_144 = Bars - 50; var_start_148 = MathAbs(var_start_52); for (var_start_92 = 0; var_start_92 < OrdersTotal(); var_start_92++) { if (OrderSelect(var_start_92,SELECT_BY_POS)) { if (OrderSymbol() == Symbol()) var_start_164 = var_start_164 + OrderProfit(); } } if (AccountLeverage() == 100) var_start_176 = NormalizeDouble(var_300 * Lots * 10.0,0); if (AccountLeverage() == 200) var_start_176 = NormalizeDouble(var_300 * Lots,0); var_start_172 = var_376 + var_start_176 + var_236; if (AccountEquity() > var_start_172) { CloseOpenOrders(); CloseAllPendingOrders(); if (var_252) PlaySound(var_256); return(0); } if (MathAbs(CurTime() - var_308) > var_316 * 20.0) { var_308 = CurTime(); var_start_116 = (Ask + Point * var_284 / 2) / Point / var_284; var_start_100 = var_start_116; var_start_100 = var_start_100 * var_284; var_start_116 = var_start_100 * Point - var_284 * var_292 / 2 * Point; var_start_180 = 0; var_start_184 = 0; if (((var_start_52 >= var_124) && (var_start_52 <= var_132)) || (var_start_52 <= -var_132)) var_start_180 = 1; if (((var_start_52 <= -var_124) && (var_start_52 >= -var_132)) || (var_start_52 >= var_132)) var_start_184 = 1; var_424 = iHigh(NULL,PERIOD_M5,0) + (MathRound(var_284 * var_292 / 2) + var_284) * Point; var_432 = iLow(NULL,PERIOD_M5,0) - (MathRound(var_284 * var_292 / 2) + var_284) * Point; if (ExistPositions()) CloseOrdersfromEXTREME(); for (var_start_92 = 0; var_start_92 < var_292; var_start_92++) { var_start_124 = var_start_116 + var_start_92 * Point * var_284; if (var_start_180) { if (IsPosition(var_start_124,Point * var_284,1) == 0) { var_start_188 = 0; if (var_268 > 0.0) var_start_188 = var_start_124 - Point * var_268; if (var_start_124 > Ask) var_start_108 = 4; else var_start_108 = 2; if (((var_start_124 > Ask) && var_276) || ((var_start_124 <= Ask) && var_280)) { var_start_104 = OrderSend(Symbol(),var_start_108,Lots,var_start_124,0,var_start_188,var_start_124 + Point * var_108,var_164,23112005,0,var_140); } } } if (var_start_184) { if (IsPosition(var_start_124,Point * var_284,0) == 0) { var_start_188 = 0; if (var_268 > 0.0) var_start_188 = var_start_124 + Point * var_268; if (var_start_124 > Bid) var_start_108 = 3; else var_start_108 = 5; if (((var_start_124 < Bid) && var_276) || ((var_start_124 >= Bid) && var_280)) { var_start_104 = OrderSend(Symbol(),var_start_108,Lots,var_start_124,0,var_start_188,var_start_124 - Point * var_108,var_164,23112005,0,var_148); } } } } } Comment("",var_204," - ",var_212," - ",var_164," - ",var_172," - " + var_180 + "\n","Grupo Yahoo! - ",var_220,"\n","Saldo inicial = ",var_376,"\n","Saldo projetado = ",var_start_172,"\n","Lotes em negociacao = ",Lots); return(0); } //+------------------------------------------------------------------+ bool IsPosition(double inp_IsPosition_0, double inp_IsPosition_8, int inp_IsPosition_16) { int ordtotal; int cnt; int ordtype; ordtotal = OrdersTotal(); for (cnt = 0; cnt < ordtotal; cnt++) { OrderSelect(cnt,SELECT_BY_POS); if ((OrderSymbol() == Symbol()) && ((OrderMagicNumber() == 23112005) || (OrderComment() == var_164))) { ordtype = OrderType(); if (MathAbs(OrderOpenPrice() - inp_IsPosition_0) < inp_IsPosition_8 * 0.9) { if ((inp_IsPosition_16 && (((ordtype == OP_BUY) || (ordtype == OP_BUYLIMIT)) || (ordtype == OP_BUYSTOP))) || (!inp_IsPosition_16 && (((ordtype == OP_SELL) || (ordtype == OP_SELLLIMIT)) || (ordtype == OP_SELLSTOP)))) return(True); } } } return(False); } //+------------------------------------------------------------------+ bool ExistPositions() { int cnt; for (cnt = 0; cnt < OrdersTotal(); cnt++) { if (OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)) { if ((OrderSymbol() == Symbol()) && (OrderMagicNumber() == 23112005)) return(True); } } return(False); } //+------------------------------------------------------------------+ void CloseAllPendingOrders() { int ordtotal; int cnt; int ordtype; int result; ordtotal = OrdersTotal(); for (cnt = ordtotal - 1; cnt >= 0; cnt--) { OrderSelect(cnt,SELECT_BY_POS); if ((OrderSymbol() == Symbol()) && ((OrderMagicNumber() == 23112005) || (OrderComment() == var_164))) { ordtype = OrderType(); if (ordtype > OP_SELL) result = OrderDelete(OrderTicket()); } } return; } //+------------------------------------------------------------------+ void CloseOpenOrders() { int ordtotal; int cnt; int ordtype; int result; ordtotal = OrdersTotal(); for (cnt = ordtotal - 1; cnt >= 0; cnt--) { OrderSelect(cnt,SELECT_BY_POS); ordtype = OrderType(); result = 0; if ((OrderSymbol() == Symbol()) && ((OrderMagicNumber() == 23112005) || (OrderComment() == var_164))) { if (ordtype == OP_BUY) result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),5,var_144); if (ordtype == OP_SELL) result = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),5,var_152); if (ordtype > OP_SELL) result = OrderDelete(OrderTicket()); } } return; } //+------------------------------------------------------------------+ void CloseOrdersfromEXTREME() { int ordtotal; int cnt; int ordtype; int result; ordtotal = OrdersTotal(); for (cnt = ordtotal - 1; cnt >= 0; cnt--) { OrderSelect(cnt,SELECT_BY_POS); if ((OrderSymbol() == Symbol()) && ((OrderMagicNumber() == 23112005) || (OrderComment() == var_164))) { ordtype = OrderType(); result = 0; if ((ordtype == OP_BUYLIMIT) && (OrderOpenPrice() <= var_432)) result = OrderDelete(OrderTicket()); if ((ordtype == OP_BUYSTOP) && (OrderOpenPrice() >= var_424)) result = OrderDelete(OrderTicket()); if ((ordtype == OP_SELLLIMIT) && (OrderOpenPrice() >= var_424)) result = OrderDelete(OrderTicket()); if ((ordtype == OP_SELLSTOP) && (OrderOpenPrice() <= var_432)) result = OrderDelete(OrderTicket()); } } return; }
Sample
Analysis
Market Information Used:
Series array that contains close prices for each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Indicator Curves created:
Indicators Used:
Moving average indicator
Custom Indicators Used:
Order Management characteristics:
Checks for the total of open orders
It automatically opens orders when conditions are reached
It Closes Orders by itself
Other Features:
It issuies visual alerts to the screen
Uses files from the file system
It writes information to file
It reads information from a file
It plays sound alerts