#property copyright "Rodolfo Leonardo"
#property link "rodolfo.leonardo@gmail.com"
extern bool use_daily_target = FALSE;
extern double daily_target = 30.0;
extern bool Trade_in_Monday =false;
extern bool Trade_in_Tuesday =true;
extern bool Trade_in_Wednesday=true;
extern bool Trade_in_Thursday=true;
extern bool Trade_in_Friday =false;
extern int magic = D'03.07.2016 00:31:30';
extern double start_lot = 0.01;
extern double range = 10.0;
extern int level = 10;
extern bool lot_multiplier = TRUE;
extern double multiplier = 2.0;
extern double increament = 0.1;
extern bool use_sl_and_tp = true;
extern double sl = 60.0;
extern double tp = 30.0;
extern double tp_in_money = 0.5;
extern bool stealth_mode = TRUE;
extern bool use_stoch = TRUE;
//stochastic params
extern int k = 10;
extern int d = 3;
extern int slowing = 3;
extern int price_field = 0;//Price field parameter. Can be one of this values: 0 - Low/High or 1 - Close/Close.
extern int stoch_shift = 0;// Index of the value taken from the indicator buffer (shift relative to the current bar the given amount of periods ago).
extern int lo_level = 30;
extern int up_level = 70;
extern double AO=0.003;
extern int TF_M = 2;
extern int Sensitivity_M = 40;
extern int TF_M2 = 2;
extern int Sensitivity_M2 = 20;
extern string StartHour = "00:00";
extern string EndHour = "23:00";
extern double MaxOrderLot = 0.0;
extern double MaxSpread = 24.0; // Maximo de Spread p/ abertura de Ordem
extern bool UseRiskPercent = TRUE;
extern double RiskPercent = 1;
extern int TrailingStop = 30;
extern color background_color = Teal;
extern int HA_MaMetod=2;
extern int HA_MaPeriod=6;
extern int HA_MaMetod2=3;
extern int HA_MaPeriod2=2;
#define NL "\n"
double gd_200;
double g_minlot_208;
double g_stoplevel_216;
int gi_224 = 0;
int g_count_228 = 0;
int g_ticket_232 = 0;
double vTamanhoPonto;
string vMsg = "FutureMilionarioX";
int Time_Frame = 0;
int Slippage = 50;
double HA1,HA2,AOnow,AOprev;
double vQtdLotes;
bool vGravaLogErro = TRUE;
int vSTOPLEVEL;
int vCodErro = -1;
bool Gi_596 = true;
bool ToNoLucro = false;
double vValorLucro;
int init() {
vValorLucro= 0;
Time_Frame = TimeCurrent();
vSTOPLEVEL = MarketInfo(Symbol(), MODE_STOPLEVEL);
if (Digits == 3 || Digits == 5) gd_200 = 10.0 * Point;
else gd_200 = Point;
g_minlot_208 = MarketInfo(Symbol(), MODE_MINLOT);
g_stoplevel_216 = MarketInfo(Symbol(), MODE_STOPLEVEL);
if (start_lot < g_minlot_208) Print("lotsize is to small.");
if (sl < g_stoplevel_216) Print("stoploss is to tight.");
if (tp < g_stoplevel_216) Print("takeprofit is to tight.");
if (g_minlot_208 == 0.01) gi_224 = 2;
if (g_minlot_208 == 0.1) gi_224 = 1;
vTamanhoPonto = TamanhoPonto();
return (0);
}
int deinit() {
return (0);
}
int start() {
int cmd_4;
double order_open_price_8;
double order_lots_16;
double order_stoploss_24;
double order_takeprofit_32;
if (use_daily_target && f0_0() >= daily_target) {
Comment("\ndaily target achieved.");
return (0);
}
//Caso o spreed seja maior que o parametrizado foge
double vSpread = MarketInfo(Symbol(), MODE_SPREAD);
if (vSpread > MaxSpread ) return (0);
if (UseRiskPercent) vQtdLotes = CalculaQtdLotes();
else vQtdLotes = start_lot; // caso n�o utiliza os lotes fixos
//if ( (DayOfWeek() == 5 || DayOfWeek() == 1) && f0_3() == 0) {
// Comment("\nstop trading in Friday.");
// return (0);
//}
if (TrailingStop != 0) VerificaOrdensParaModificar();
if(TimeFilter()){
if(IsExpertEnabled()){
if (f0_3() == 0 && g_count_228 == 0) {
//if (f0_1() == -2 || (M()==1 || M2()==1 || HA() ==1)) {
if (SinalMestre() == 1 && SignalMega() ==1){
if (stealth_mode) {
if (use_sl_and_tp) g_ticket_232 = OrderSend(Symbol(), OP_BUY, vQtdLotes, Ask, 3, Ask - sl * gd_200, Ask + tp * gd_200, "", magic, 0, Blue);
else g_ticket_232 = OrderSend(Symbol(), OP_BUY, vQtdLotes, Ask, 3, 0, 0, "", magic, 0, Blue);
} else {
if (use_sl_and_tp) {
if (OrderSend(Symbol(), OP_BUY, vQtdLotes, Ask, 3, Ask - sl * gd_200, Ask + tp * gd_200, "", magic, 0, Blue) > 0) {
for (int li_0 = 1; li_0 < level; li_0++) {
if (lot_multiplier) {
g_ticket_232 = OrderSend(Symbol(), OP_BUYLIMIT, NormalizeDouble(vQtdLotes * MathPow(multiplier, li_0), gi_224), Ask - range * li_0 * gd_200, 3, Ask - range * li_0 * gd_200 - sl * gd_200,
Ask - range * li_0 * gd_200 + tp * gd_200, "", magic, 0, Blue);
} else {
g_ticket_232 = OrderSend(Symbol(), OP_BUYLIMIT, NormalizeDouble(vQtdLotes + increament * li_0, gi_224), Ask - range * li_0 * gd_200, 3, Ask - range * li_0 * gd_200 - sl * gd_200,
Ask - range * li_0 * gd_200 + tp * gd_200, "", magic, 0, Blue);
}
}
}
} else {
if (OrderSend(Symbol(), OP_BUY, vQtdLotes, Ask, 3, 0, 0, "", magic, 0, Blue) > 0) {
for (li_0 = 1; li_0 < level; li_0++) {
if (lot_multiplier) {
g_ticket_232 = OrderSend(Symbol(), OP_BUYLIMIT, NormalizeDouble(vQtdLotes * MathPow(multiplier, li_0), gi_224), Ask - range * li_0 * gd_200, 3, 0, 0, "", magic, 0,
Blue);
} else g_ticket_232 = OrderSend(Symbol(), OP_BUYLIMIT, NormalizeDouble(vQtdLotes + increament * li_0, gi_224), Ask - range * li_0 * gd_200, 3, 0, 0, "", magic, 0, Blue);
}
}
}
}
}
//if (f0_1() == 2 || (M()==-1 || M2()==-1 || HA() ==-1)) {
if (SinalMestre() == -1 && SignalMega() ==-1 ){
if (stealth_mode) {
if (use_sl_and_tp) g_ticket_232 = OrderSend(Symbol(), OP_SELL, vQtdLotes, Bid, 3, Bid + sl * gd_200, Bid - tp * gd_200, "", magic, 0, Red);
else g_ticket_232 = OrderSend(Symbol(), OP_SELL, vQtdLotes, Bid, 3, 0, 0, "", magic, 0, Red);
} else {
if (use_sl_and_tp) {
if (OrderSend(Symbol(), OP_SELL, vQtdLotes, Bid, 3, Bid + sl * gd_200, Bid - tp * gd_200, "", magic, 0, Red) > 0) {
for (li_0 = 1; li_0 < level; li_0++) {
if (lot_multiplier) {
g_ticket_232 = OrderSend(Symbol(), OP_SELLLIMIT, NormalizeDouble(vQtdLotes * MathPow(multiplier, li_0), gi_224), Bid + range * li_0 * gd_200, 3, Bid + range * li_0 * gd_200 +
sl * gd_200, Bid + range * li_0 * gd_200 - tp * gd_200, "", magic, 0, Red);
} else {
g_ticket_232 = OrderSend(Symbol(), OP_SELLLIMIT, NormalizeDouble(vQtdLotes + increament * li_0, gi_224), Bid + range * li_0 * gd_200, 3, Bid + range * li_0 * gd_200 +
sl * gd_200, Bid + range * li_0 * gd_200 - tp * gd_200, "", magic, 0, Red);
}
}
}
} else {
if (OrderSend(Symbol(), OP_SELL, vQtdLotes, Bid, 3, 0, 0, "", magic, 0, Red) > 0) {
for (li_0 = 1; li_0 < level; li_0++) {
if (lot_multiplier) {
g_ticket_232 = OrderSend(Symbol(), OP_SELLLIMIT, NormalizeDouble(vQtdLotes * MathPow(multiplier, li_0), gi_224), Bid + range * li_0 * gd_200, 3, 0, 0, "", magic,
0, Red);
} else g_ticket_232 = OrderSend(Symbol(), OP_SELLLIMIT, NormalizeDouble(vQtdLotes + increament * li_0, gi_224), Bid + range * li_0 * gd_200, 3, 0, 0, "", magic, 0, Red);
}
}
}
}
}
}
if (stealth_mode && f0_3() > 0 && f0_3() < level) {
for (li_0 = 0; li_0 < OrdersTotal(); li_0++) {
OrderSelect(li_0, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != magic) continue;
cmd_4 = OrderType();
order_open_price_8 = OrderOpenPrice();
order_lots_16 = OrderLots();
}
if (cmd_4 == OP_BUY && Ask <= order_open_price_8 - range * gd_200 ) {
if (use_sl_and_tp) {
if (lot_multiplier) g_ticket_232 = OrderSend(Symbol(), OP_BUY, NormalizeDouble(order_lots_16 * multiplier, gi_224), Ask, 3, Ask - sl * gd_200, Ask + tp * gd_200, "", magic, 0, Blue);
else g_ticket_232 = OrderSend(Symbol(), OP_BUY, NormalizeDouble(order_lots_16 + increament, gi_224), Ask, 3, Ask - sl * gd_200, Ask + tp * gd_200, "", magic, 0, Blue);
} else {
if (lot_multiplier) g_ticket_232 = OrderSend(Symbol(), OP_BUY, NormalizeDouble(order_lots_16 * multiplier, gi_224), Ask, 3, 0, 0, "", magic, 0, Blue);
else g_ticket_232 = OrderSend(Symbol(), OP_BUY, NormalizeDouble(order_lots_16 + increament, gi_224), Ask, 3, 0, 0, "", magic, 0, Blue);
}
}
if (cmd_4 == OP_SELL && Bid >= order_open_price_8 + range * gd_200 ) {
if (use_sl_and_tp) {
if (lot_multiplier) g_ticket_232 = OrderSend(Symbol(), OP_SELL, NormalizeDouble(order_lots_16 * multiplier, gi_224), Bid, 3, Bid + sl * gd_200, Bid - tp * gd_200, "", magic, 0, Red);
else g_ticket_232 = OrderSend(Symbol(), OP_SELL, NormalizeDouble(order_lots_16 + increament, gi_224), Bid, 3, Bid + sl * gd_200, Bid - tp * gd_200, "", magic, 0, Red);
} else {
if (lot_multiplier) g_ticket_232 = OrderSend(Symbol(), OP_SELL, NormalizeDouble(order_lots_16 * multiplier, gi_224), Bid, 3, 0, 0, "", magic, 0, Red);
else g_ticket_232 = OrderSend(Symbol(), OP_SELL, NormalizeDouble(order_lots_16 + increament, gi_224), Bid, 3, 0, 0, "", magic, 0, Red);
}
}
}
if (use_sl_and_tp && f0_3() > 1) {
for (li_0 = 0; li_0 < OrdersTotal(); li_0++) {
OrderSelect(li_0, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != magic || OrderType() > OP_SELL) continue;
cmd_4 = OrderType();
order_stoploss_24 = OrderStopLoss();
order_takeprofit_32 = OrderTakeProfit();
}
for (li_0 = OrdersTotal() - 1; li_0 >= 0; li_0--) {
OrderSelect(li_0, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != magic || OrderType() > OP_SELL) continue;
if (OrderType() == cmd_4)
if (OrderStopLoss() != order_stoploss_24 || OrderTakeProfit() != order_takeprofit_32) OrderModify(OrderTicket(), OrderOpenPrice(), order_stoploss_24, order_takeprofit_32, 0, CLR_NONE);
}
}
double ld_40 = 0;
for (li_0 = 0; li_0 < OrdersTotal(); li_0++) {
OrderSelect(li_0, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != magic || OrderType() > OP_SELL) continue;
ld_40 += OrderProfit();
}
}
}
if (ld_40 >= tp_in_money || g_count_228 > 0 ) {
vValorLucro = ld_40 + vValorLucro;
f0_2();
f0_2();
f0_2();
g_count_228++;
if (f0_3() == 0) g_count_228 = 0;
}
if ((!stealth_mode) && use_sl_and_tp && f0_3() < level) f0_2();
Informacoes();
return (0);
}
int CountTrades() {
int count = 0;
for (int trade = OrdersTotal() - 1; trade >= 0; trade--) {
OrderSelect(trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != magic) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == magic)
if (OrderType() == OP_SELL || OrderType() == OP_BUY) count++;
}
return (count);
}
void Informacoes() {
double Ld_0;
double Ld_8;
double Ld_16;
double Ld_24;
double Ld_32;
double Ld_40;
double Ld_48;
double Ld_56;
string Ls_64;
string Ls_72;
int Li_84;
if (true) {
Ls_64 = "==========================\n";
Ls_64 = Ls_64 + " " + "FutureMilionarioX v1.00"
+ "\n";
Ls_64 = Ls_64 + "==========================\n";
for (int count_80 = 0; count_80 <= MathMod(Seconds(), 20); count_80++) Ls_72 = Ls_72 + "|";
Ls_64 = Ls_64 + " Status: RUNNING " + Ls_72
+ "\n";
Ls_64 = Ls_64 + "==========================\n";
Ls_64 = Ls_64 + " ValorLucro: $ " + vValorLucro + "\n";
Ls_64 = Ls_64 + " Dia da semana : " + TimeDayOfWeek(Time[0]) + "\n";
Ls_64 = Ls_64 + "==========================\n";
Ls_64 = Ls_64 + " Ordens Abertas: " + CountTrades() + " \n";
Ls_64 = Ls_64 + " Tempo Atual: " + TimeToStr(TimeCurrent(), TIME_SECONDS) + " \n";
Ls_64 = Ls_64 + " UseRiskPercent: " + UseRiskPercent + "\n";
Ls_64 = Ls_64 + " RiskPercent: " + RiskPercent + "\n";
Ls_64 = Ls_64 + " MaxSpread: " + MaxSpread + "\n";
Ls_64 = Ls_64 + " TakeProfit: " + tp + "\n";
Ls_64 = Ls_64 + " StopLoss: " + sl + "\n";
// Ls_64 = Ls_64 + " M: " + M() + "\n";
// Ls_64 = Ls_64 + " M2: " + M2() + "\n";
Ls_64 = Ls_64 + " SignalMega(): " + SignalMega() + "\n";
Ls_64 = Ls_64 + " Stocastic: " + Sinalstochastic() + "\n";
//Ls_64 = Ls_64 + " MAX Floating DD: $ " + DoubleToStr(Gd_616, 2)
+ "\n";
//Ls_64 = Ls_64 + " BUY Breakeven Level @ " + DoubleToStr(Ld_48, Digits)
+ "\n";
// Ls_64 = Ls_64 + " SELL Breakeven Level @ " + DoubleToStr(Ld_56, Digits)
+ "\n";
Ls_64 = Ls_64 + "==========================\n";
//Ls_64 = Ls_64 + " Base Lot Size: " + DoubleToStr(Gda_524[0], 2) + " lots\n";
// Ls_64 = Ls_64 + " Slippage: " + DoubleToStr(slippage, 2) + " pips\n";
Ls_64 = Ls_64 + "==========================\n";
Comment(Ls_64);
//f0_38("Breakeven_buy", Ld_48, Green, "Breakeven Line");
//f0_38("Breakeven_sell", Ld_56, Red, "Breakeven Line");
Li_84 = 11;
if (Gi_596 || Seconds() % 5 == 0) {
Gi_596 = FALSE;
for (int count_88 = 0; count_88 < 9; count_88++) {
for (int count_92 = 0; count_92 < Li_84; count_92++) {
ObjectDelete("background" + count_88 + count_92);
ObjectDelete("background" + count_88 + ((count_92 + 1)));
ObjectDelete("background" + count_88 + ((count_92 + 2)));
ObjectCreate("background" + count_88 + count_92, OBJ_LABEL, 0, 0, 0);
ObjectSetText("background" + count_88 + count_92, "n", 30, "Wingdings", background_color);
ObjectSet("background" + count_88 + count_92, OBJPROP_XDISTANCE, 20 * count_88);
ObjectSet("background" + count_88 + count_92, OBJPROP_YDISTANCE, 23 * count_92 + 9);
}
}
}
}
}
double f0_0() {
int day_0 = Day();
double ld_ret_4 = 0;
for (int pos_12 = 0; pos_12 < OrdersHistoryTotal(); pos_12++) {
OrderSelect(pos_12, SELECT_BY_POS, MODE_HISTORY);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != magic) continue;
if (TimeDay(OrderOpenTime()) == day_0) ld_ret_4 += OrderProfit();
}
return (ld_ret_4);
}
int f0_3() {
int count_0 = 0;
for (int pos_4 = 0; pos_4 < OrdersTotal(); pos_4++) {
OrderSelect(pos_4, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != magic) continue;
count_0++;
}
return (count_0);
}
void f0_2() {
for (int pos_0 = OrdersTotal() - 1; pos_0 >= 0; pos_0--) {
OrderSelect(pos_0, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != magic) continue;
if (OrderType() > OP_SELL) OrderDelete(OrderTicket());
else {
if (OrderType() == OP_BUY) OrderClose(OrderTicket(), OrderLots(), Bid, 3, CLR_NONE);
else OrderClose(OrderTicket(), OrderLots(), Ask, 3, CLR_NONE);
}
}
}
int mper[10]={0,1,5,15,30,60,240,1440,10080,43200};
//int M(){
// int MTSSignal=0;
// int MTSstart=0;
// double MTS_Green1=iCustom(Symbol(),mper[TF_M],"medium",Sensitivity_M,1,0);
// double MTS_Red1=iCustom(Symbol(),mper[TF_M],"medium",Sensitivity_M,2,0);
// double MTS_Green2=iCustom(Symbol(),mper[TF_M],"medium",Sensitivity_M,1,1);
// double MTS_Red2=iCustom(Symbol(),mper[TF_M],"medium",Sensitivity_M,2,1);
// if((MTS_Green1!=EMPTY_VALUE)&&(MTS_Green2!=EMPTY_VALUE)) MTSstart=1;
// if((MTS_Red1!=EMPTY_VALUE)&&(MTS_Red2!=EMPTY_VALUE)) MTSstart=-1;
// if(MTSstart<0) MTSSignal= -1; //������ Sell
// if(MTSstart>0) MTSSignal = 1; // ������ Buy
// return(MTSSignal);
//}
//
//int M2(){
// int MTSSignal2=0;
// int MTSstart2=0;
// double MTS_Green1=iCustom(Symbol(),mper[TF_M2],"medium",Sensitivity_M2,1,0);
// double MTS_Red1=iCustom(Symbol(),mper[TF_M2],"medium",Sensitivity_M2,2,0);
// double MTS_Green2=iCustom(Symbol(),mper[TF_M2],"medium",Sensitivity_M2,1,1);
// double MTS_Red2=iCustom(Symbol(),mper[TF_M2],"medium",Sensitivity_M2,2,1);
// if((MTS_Green1!=EMPTY_VALUE)&&(MTS_Green2!=EMPTY_VALUE)) MTSstart2=1;
// if((MTS_Red1!=EMPTY_VALUE)&&(MTS_Red2!=EMPTY_VALUE)) MTSstart2=-1;
// if(MTSstart2<0) MTSSignal2= -1; //������ Sell
// if(MTSstart2>0) MTSSignal2 = 1; // ������ Buy
// return(MTSSignal2);
//}
bool TimeFilter(){
bool _res = false;
datetime _time_curent = TimeCurrent();
datetime _time_start = StrToTime(DoubleToStr(Year(),0)+"."+DoubleToStr(Month(),0)+"."+DoubleToStr(Day(),0)+" "+StartHour);
datetime _time_stop = StrToTime(DoubleToStr(Year(),0)+"."+DoubleToStr(Month(),0)+"."+DoubleToStr(Day(),0)+" "+EndHour);
if(((Trade_in_Monday==true) && (TimeDayOfWeek(Time[0]) == 1)) ||
((Trade_in_Tuesday==true) && (TimeDayOfWeek(Time[0]) == 2)) ||
((Trade_in_Wednesday==true) && (TimeDayOfWeek(Time[0]) == 3)) ||
((Trade_in_Thursday==true) && (TimeDayOfWeek(Time[0]) == 4)) ||
((Trade_in_Friday==true) && (TimeDayOfWeek(Time[0]) == 5)))
if(_time_start > _time_stop){
if(_time_curent >= _time_start || _time_curent <= _time_stop) _res = true;
}else
if(_time_curent >= _time_start && _time_curent <= _time_stop) _res = true;
return(_res);
}
//Calcula a quantidade de lotes conforme o risco
double CalculaQtdLotesRisco(double vRiskPercent)
{
bool vTrailingStop = TRUE;
double vMinLotSymbol = MarketInfo(Symbol(), MODE_MINLOT);
double vMODE_POINT = MarketInfo(Symbol(), MODE_LOTSIZE) / AccountLeverage();
double vValoraArriscar = vRiskPercent / 100.0 * AccountBalance() / vMODE_POINT;
double vRetorno = MathFloor(vValoraArriscar);
while (vTrailingStop)
{
vRetorno += vMinLotSymbol;
if (vRetorno > vValoraArriscar)
{
vTrailingStop = FALSE;
vRetorno -= vMinLotSymbol;
}
}
return (vRetorno);
}
//Calcula a quantidade de lotes
double CalculaQtdLotes()
{
double vQtdLotes = start_lot;
if (UseRiskPercent) vQtdLotes = CalculaQtdLotesRisco(MathAbs(RiskPercent));
if (vQtdLotes > MaxOrderLot && MaxOrderLot != 0.0) vQtdLotes = MaxOrderLot;
vQtdLotes = ConfiguraTamanhoLote(vQtdLotes);
return (vQtdLotes);
}
//Define tamanho de lote conforme o permitido para a moeda negociada
double ConfiguraTamanhoLote(double pTamanhoLote)
{
//Minimum permitted amount of a lot
if (pTamanhoLote > MarketInfo(Symbol(), MODE_MAXLOT)) pTamanhoLote = MarketInfo(Symbol(), MODE_MAXLOT);
else
if (pTamanhoLote < MarketInfo(Symbol(), MODE_MINLOT)) pTamanhoLote = MarketInfo(Symbol(), MODE_MINLOT);
return (pTamanhoLote);
}
// tamanho de ponto na moeda de cota��o
double TamanhoPonto(string a_symbol_0 = "0")
{
if (a_symbol_0 == "0") a_symbol_0 = Symbol();
int digits_8 = MarketInfo(a_symbol_0, MODE_DIGITS);
double vretorno = 0.0;
double vMODE_POINT = MarketInfo(a_symbol_0, MODE_POINT);
if (digits_8 == 5 || digits_8 == 3) vretorno = 10.0 * vMODE_POINT;
else vretorno = vMODE_POINT;
return (vretorno);
}
int HA()
{
int i=1;
HA1=iCustom(Symbol(),mper[TF_M],"Heiken_Ashi_Smoothed",HA_MaMetod,HA_MaPeriod,HA_MaMetod2,HA_MaPeriod2,2,i);
HA2=iCustom(Symbol(),mper[TF_M],"Heiken_Ashi_Smoothed",HA_MaMetod,HA_MaPeriod,HA_MaMetod2,HA_MaPeriod2,3,i);
static int condition =0;
if(HA2>HA1)condition =1;
else if(HA1>HA2)condition =-1;
else
condition = 0;
return(condition);
}
int Sinalstochastic() {
double istochastic_0 = iStochastic(Symbol(), 0, k, d, slowing, MODE_SMA, price_field, MODE_SIGNAL, stoch_shift);
if (use_stoch) {
if (istochastic_0 > up_level) return (-1);
if (istochastic_0 < lo_level) return (1);
}
return (0);
}
int SinalMestre(){
int vret = 0;
double Procent =1.3;
double max = NormalizeDouble(iHigh(Symbol(),1440,0),Digits);
double min = NormalizeDouble(iLow (Symbol(),1440,0),Digits);
double opp=NormalizeDouble(iOpen(Symbol(),1440,0),Digits);
double cl=NormalizeDouble(iClose(Symbol(),1440,0),Digits);
if(cl>min) { double x=NormalizeDouble(cl*100/min-100,2); }
if(cl<max) { double y=NormalizeDouble(cl*100/max-100,2); }
if (Procent*(-1)<=y&&Close[1]>Open[1]){ vret = 1; }
if (Procent >=x&&Close[1]<Open[1]){ vret = -1; }
return vret;
}
int SignalMega()
{
int MegaFX = iCustom(Symbol(),240,"mega_fx",6,0);
return(MegaFX);
}
void CloseAll()
{
bool Result;
int i,Pos,Error;
int Total=OrdersTotal();
if(Total>0)
{
for(i=Total-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == TRUE)
{
Pos=OrderType();
if(Pos==OP_BUY)
{Result=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, CLR_NONE);}
if(Pos==OP_SELL)
{Result=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, CLR_NONE);}
if((Pos==OP_BUYSTOP)||(Pos==OP_SELLSTOP)||(Pos==OP_BUYLIMIT)||(Pos==OP_SELLLIMIT))
{Result=OrderDelete(OrderTicket(), CLR_NONE);}
//-----------------------
if(Result!=true)
{
Error=GetLastError();
Print("LastError = ",Error);
}
else Error=0;
//-----------------------
}
}
}
return(0);
}
//Oferta/Venda (Bid) e de Demanda/Compra (Ask).
void VerificaOrdensParaModificar()
{
double vprice;
int vTrailingStop = TrailingStop;
//percorre as ordens
for (int c = 0; c < OrdersTotal(); c++)
{
//se a ordem estiver aberta
if (OrderSelect(c, SELECT_BY_POS) != FALSE)
{
//se a ordem for para a moeda
if (OrderSymbol() == Symbol())
{
//verifica o Numero Magico
if (OrderMagicNumber() >= magic && OrderMagicNumber() <= magic)
{
//Se a ordem for de compra
if (OrderType() == OP_BUY)
{
//PrecoOrdem recebe o preco de venda atual
vprice = Bid - (vTamanhoPonto * vTrailingStop );
// N�o (Se o pre�o atual de venda for maior que o preco do StopLoss e o pre�o de abertura da Ordem for menor que o pre�o atual de venda menos o TrailingStop)
if (!(OrderStopLoss() < vprice && OrderOpenPrice() < Bid - vTrailingStop * vTamanhoPonto)) continue;
ModificaOrdem(vprice, OrderTicket());
continue;
//VENDA
}else{
//PrecoOrdem recebe o preco de compra atual
vprice = Ask + (vTamanhoPonto * vTrailingStop );
//Se o pre�o atual de compra for maior que o preco do StopLoss e o pre�o de abertura da Ordem for maior que o pre�o atual de compra menos o TrailingStop
if (OrderStopLoss() > vprice && OrderOpenPrice() > Ask + (vTrailingStop * vTamanhoPonto)) ModificaOrdem(vprice, OrderTicket());
}
}
}
}
}
}
//Altera a ordem
void ModificaOrdem(double a_price_0, int vOrdemAberta)
{
vSTOPLEVEL = MarketInfo(Symbol(), MODE_STOPLEVEL);
if (!OrderModify(vOrdemAberta, OrderOpenPrice(), a_price_0, OrderTakeProfit(), 0, Red))
if (vGravaLogErro) GravaErro();
}
void GravaErro()
{
string vErro;
if (vGravaLogErro)
{
if (vCodErro > 0)
{
vErro = "Error:" + GetLastError() + " OrderType:" + OrderType() + " Ticket:" + OrderTicket();
vErro = TimeToStr(TimeCurrent(), TIME_DATE|TIME_MINUTES|TIME_SECONDS) + " " + vErro;
FileWrite(vCodErro, vErro);
}
}
}