← Назад к списку файлов

ea_2_activ_008.mq5

Поиск по коду файла

#property strict

#define PRODUCT_ID 10750//Quadro Hedge
#define VERSION "1.00"; //номер версии при обновлении меняем тоже, это на будущее когда будет доступна првоерка версий и обновления

#property version   VERSION

#include <TradeFunctions.mqh>

#include <EA_Protect\protect.mqh>

#include <EA_Protect/Protect.mqh>
SHOW_LICENSE_PARAMS
PROTECT_CREATE

int OnInit()
  {
      // код доступен только после оплаты
   }

void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0);
   EventKillTimer();

   PROTECT_DEINIT
  }

void OnTimer()
  {
   PROTECT_TIMER
   f_mouseclick();
  }

void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam) {PROTECT_EVENT}

input group "---------  основные настройки"
enum danet
  {
   da,//да
   net//нет
  };
input danet manualtrade=net;//открытие сделок вручную
input string activ1="AUDUSD";//актив 1
input string activ2="NZDUSD";//актив 2

input int magic1=111;//магик первая пара
input int magic2=222;//магик вторая пара
input danet dynlot=net;//лот динамический
input double dynlotvalue=0.01;//
input double dynlotstepmoney=50;//
input double fixlot=0.01;//лот фиксированный
input double koefforactiv2=1.5;//коэффициент лота для второго актива
input group "---------  профит на стартовой паре"
input double startprofitmoney=10;//профит на стартовой паре в деньгах
input double startprofitpercent=1;//профит на стартовой паре в процентах от депозита
input danet tralprofita=net;//трал профита
input double starttralaprofita=10;//старт трала профита
input double shagtralaprofita=5;//шаг трала профита
input danet starttrala=net;//сделать алерт на старт трала
input danet shagtrala=net;//сделать алерт на каждый шаг трала

input group "---------  как закрывать остаточную пару"
input double bezubitok=0;//безубыток или в деньгах + или -
input double procentotdepo=1;//в проценте от депозита
input danet dolivka=net;//догон, доливка
input danet lossdolivka=net;//доливка только по убыточной сделке
input double ddinmoney=100;//просадка в деньгах
input double ddinpercent=20;//просадка в процентах
input double koefmartin=1;//коэфф добавки лота актив 1
input double koefmartin2=1;//коэфф добавки лота актив 2
input danet stoploss=net;//стоплосс
input double stoplossmoney=300;//стоплосс в деньгах
input double stoplosspercent=25;//стоплосс в процентах
input group "---------  настройки времени"
input danet timeinterval=net;//Торговля в строго заданном временном интервале
input int starthour=10;//Час старта торговли
input int startminute=30;//Минута старта торговли
input int endhour=15;//Час окончания торговли
input int endminute=30;//Минута окончания торговли
input danet closeallatendtime=net;//закрывать все позы по времени окончания
input danet vikluchitsovetnik=net;//выключать советник по времени окончания
input int countkrug=1;//сколько кругов мотать
input danet krugipovremeny=net;//круги по времени
input int hourkrug1=12;//Час круга
input int minkrug1=0;//Минута круга
bool krug1,krug2,krug3;
input int hourkrug2=16;//Час круга
input int minkrug2=0;//Минута круга
input int hourkrug3=19;//Час круга
input int minkrug3=30;//Минута круга
input group "---------  настройки панели"
input danet ShowPanel=da;//показать панель
input color TextColor=clrWhite;//цвет текста
input int FontSize=8;//размер текста
input color PanelColor=clrBlack;//фон панели
input group "---------  рынок закрыт для торговли"
input danet marketclose=da;//Запретить торговлю при закрытом рынке
input int marketclosehour=22;//Час закрытия рынка
input int marketcloseminute=50;//Минута закрытия рынка
input int marketcloseendhour=1;//Час открытия рынка
input int marketcloseendminute=10;//Минута открытия рынка
int Slippage=123;
string Komment="EA_2_Activ";
double tralmag1,tralmag2;
double dolivka1,dolivka2;
int cdolivka1,cdolivka2;
double dolivka1perc,dolivka2perc;
int cdolivka1perc,cdolivka2perc;
double firstlot;
int kolkrug;
datetime daykrug;
datetime tektime;
void OnTick()
  {
      // код доступен только после оплаты
   }

  if(!PROTECT_STATUS) return;

   if(SymbolInfoDouble(activ1,SYMBOL_ASK)==0||
      SymbolInfoDouble(activ1,SYMBOL_BID)==0||
      SymbolInfoDouble(activ2,SYMBOL_ASK)==0||
      SymbolInfoDouble(activ2,SYMBOL_BID)==0)
      return;
   if(TimeCurrent()>tektime+3&&ShowPanel==da)
     {
      DrawTextLabel("profm1",0,5,204,"текущий профит по магику "+IntegerToString(magic1)+" : "+DoubleToString(f_profit(magic1),2),FontSize,TextColor);
      DrawTextLabel("profm2",0,5,234,"текущий профит по магику "+IntegerToString(magic2)+" : "+DoubleToString(f_profit(magic2),2),FontSize,TextColor);
      DrawTextLabel("lott",0,5,264,"общая лотность позиций : "+DoubleToString(f_lot(),2),FontSize,TextColor);
      DrawTextLabel("alldd",0,5,294,"просадка в процентах : "+DoubleToString(
                       (100.0*(f_allprofit()/AccountInfoDouble(ACCOUNT_BALANCE))<0?MathAbs(100.0*(f_allprofit()/AccountInfoDouble(ACCOUNT_BALANCE))):0)
                       ,2)+"%",FontSize,TextColor);
     }

   f_mouseclick();

   if(daykrug!=iTime(_Symbol,PERIOD_D1,0))
     {
      daykrug=iTime(_Symbol,PERIOD_D1,0);
      kolkrug=0;
      krug1=false;
      krug2=false;
      krug3=false;
     }
   if(marketclose==da)
     {
      datetime tstart=StringToTime(IntegerToString(YearMQL4())+"."+IntegerToString(MonthMQL4())+"."
                                   +IntegerToString(DayMQL4())+" "+IntegerToString(marketclosehour)+":"+IntegerToString(marketcloseminute)+":00");
      datetime tend=StringToTime(IntegerToString(YearMQL4())+"."+IntegerToString(MonthMQL4())+"."
                                 +IntegerToString(DayMQL4())+" "+IntegerToString(marketcloseendhour)+":"+IntegerToString(marketcloseendminute)+":00");
      if(tstart<tend)
         if(TimeCurrent()>tstart&&TimeCurrent()<tend)
            return;
      if(tstart>tend)
         if(TimeCurrent()>tstart||TimeCurrent()<tend)
            return;
     }
   if(f_count_of_magic(magic1)==0&&f_count_of_magic(magic2)>0)
     {
      if(f_profit(magic2)>=bezubitok)
         f_close(magic2);
      if(procentotdepo)
         if(100.0*(f_profit(magic2)/AccountInfoDouble(ACCOUNT_BALANCE))>=procentotdepo)
            f_close(magic2);
      if(stoploss==da)
        {
         if(MathAbs(stoplossmoney)>0)
            if(f_profit(magic2)<=(-1)*MathAbs(stoplossmoney))
               f_close(magic2);
         if(MathAbs(stoplosspercent)>0)
            if(100.0*(f_profit(magic2)/AccountInfoDouble(ACCOUNT_BALANCE))<=(-1)*MathAbs(stoplosspercent))
               f_close(magic2);
        }
      if(dolivka==da)
        {
         if(MathAbs(ddinmoney)>0)
           {
            if(f_profit(magic2)<=(-1)*MathAbs(ddinmoney)&&dolivka2==0)
              {
               dolivka2=f_profit(magic2);
               cdolivka2=1;
               double tradelot=firstlot*MathPow(koefmartin,cdolivka2);
               double tradelot2=firstlot2*MathPow(koefmartin2,cdolivka2);
               if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic2,activ1)<0))
                  if(OrderSend(activ1,OP_BUY,
                               MathFloor(tradelot/SymbolInfoDouble(activ1,SYMBOL_VOLUME_STEP))*SymbolInfoDouble(activ1,SYMBOL_VOLUME_STEP),
                               SymbolInfoDouble(activ1,SYMBOL_ASK),Slippage,0,0,Komment,magic2,0,clrBlue)) {}
               if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic2,activ2)<0))
                  if(OrderSend(activ2,OP_SELL,

                               MathFloor(tradelot2/SymbolInfoDouble(activ2,SYMBOL_VOLUME_STEP))*SymbolInfoDouble(activ2,SYMBOL_VOLUME_STEP),
                               SymbolInfoDouble(activ2,SYMBOL_BID),Slippage,0,0,Komment,magic2,0,clrRed)) {}
               cdolivka2++;
              }
            /*if(f_profit(magic2)<=(-1)*MathAbs(ddinmoney)+dolivka2&&dolivka2!=0){
               dolivka2=f_profit(magic2);
               double tradelot=firstlot*MathPow(koefmartin,cdolivka2);
               double tradelot2=firstlot2*MathPow(koefmartin2,cdolivka2);
               if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic2,activ1)<0))
               if(OrderSend(activ1,OP_BUY,tradelot,
               SymbolInfoDouble(activ1,SYMBOL_ASK),Slippage,0,0,Komment,magic2,0,clrBlue)){}
               if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic2,activ2)<0))
               if(OrderSend(activ2,OP_SELL,tradelot2,
               SymbolInfoDouble(activ2,SYMBOL_BID),Slippage,0,0,Komment,magic2,0,clrRed)){}
               cdolivka2++;
            }*/
           }
         if(MathAbs(ddinpercent)>0)
           {
            if(100.0*(f_profit(magic2)/AccountInfoDouble(ACCOUNT_BALANCE))
               <=(-1)*MathAbs(ddinpercent)&&dolivka2perc==0)
              {
               dolivka2perc=100.0*(f_profit(magic2)/AccountInfoDouble(ACCOUNT_BALANCE));
               cdolivka2perc=1;
               double tradelot=firstlot*MathPow(koefmartin,cdolivka2perc);
               double tradelot2=firstlot2*MathPow(koefmartin2,cdolivka2perc);
               if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic2,activ1)<0))
                  if(OrderSend(activ1,OP_BUY,
                               MathFloor(tradelot/SymbolInfoDouble(activ1,SYMBOL_VOLUME_STEP))*SymbolInfoDouble(activ1,SYMBOL_VOLUME_STEP),
                               SymbolInfoDouble(activ1,SYMBOL_ASK),Slippage,0,0,Komment,magic2,0,clrBlue)) {}
               if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic2,activ2)<0))
                  if(OrderSend(activ2,OP_SELL,
                               MathFloor(tradelot2/SymbolInfoDouble(activ2,SYMBOL_VOLUME_STEP))*SymbolInfoDouble(activ2,SYMBOL_VOLUME_STEP),
                               SymbolInfoDouble(activ2,SYMBOL_BID),Slippage,0,0,Komment,magic2,0,clrRed)) {}
               cdolivka2perc++;
              }
            /*if(100.0*(f_profit(magic2)/AccountInfoDouble(ACCOUNT_BALANCE))
            <=(-1)*MathAbs(ddinpercent)+dolivka2perc&&dolivka2perc!=0){
               dolivka2perc=100.0*(f_profit(magic2)/AccountInfoDouble(ACCOUNT_BALANCE));
               double tradelot=firstlot*MathPow(koefmartin,cdolivka2perc);
               double tradelot2=firstlot2*MathPow(koefmartin2,cdolivka2perc);
               if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic2,activ1)<0))
               if(OrderSend(activ1,OP_BUY,tradelot,
               SymbolInfoDouble(activ1,SYMBOL_ASK),Slippage,0,0,Komment,magic2,0,clrBlue)){}
               if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic2,activ2)<0))
               if(OrderSend(activ2,OP_SELL,tradelot2,
               SymbolInfoDouble(activ2,SYMBOL_BID),Slippage,0,0,Komment,magic2,0,clrRed)){}
               cdolivka2perc++;
            }*/
           }
        }
     }
   if(f_count_of_magic(magic2)==0&&f_count_of_magic(magic1)>0)
     {
      if(f_profit(magic1)>=bezubitok)
         f_close(magic1);
      if(procentotdepo)
         if(100.0*(f_profit(magic1)/AccountInfoDouble(ACCOUNT_BALANCE))>=procentotdepo)
            f_close(magic1);
      if(stoploss==da)
        {
         if(MathAbs(stoplossmoney)>0)
            if(f_profit(magic1)<=(-1)*MathAbs(stoplossmoney))
               f_close(magic1);
         if(MathAbs(stoplosspercent)>0)
            if(100.0*(f_profit(magic1)/AccountInfoDouble(ACCOUNT_BALANCE))<=(-1)*MathAbs(stoplosspercent))
               f_close(magic1);
        }
      if(dolivka==da)
        {
         if(MathAbs(ddinmoney)>0)
           {
            if(f_profit(magic1)<=(-1)*MathAbs(ddinmoney)&&dolivka1==0)
              {
               dolivka1=f_profit(magic1);
               cdolivka1=1;
               double tradelot=firstlot*MathPow(koefmartin,cdolivka1);
               double tradelot2=firstlot2*MathPow(koefmartin2,cdolivka1);
               if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic1,activ1)<0))
                  if(OrderSend(activ1,OP_SELL,
                               MathFloor(tradelot/SymbolInfoDouble(activ1,SYMBOL_VOLUME_STEP))*SymbolInfoDouble(activ1,SYMBOL_VOLUME_STEP),
                               SymbolInfoDouble(activ1,SYMBOL_BID),Slippage,0,0,Komment,magic1,0,clrRed)) {}
               if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic1,activ2)<0))
                  if(OrderSend(activ2,OP_BUY,
                               MathFloor(tradelot2/SymbolInfoDouble(activ2,SYMBOL_VOLUME_STEP))*SymbolInfoDouble(activ2,SYMBOL_VOLUME_STEP),
                               SymbolInfoDouble(activ2,SYMBOL_ASK),Slippage,0,0,Komment,magic1,0,clrBlue)) {}
               cdolivka1++;
              }
            /*if(f_profit(magic1)<=(-1)*MathAbs(ddinmoney)&&dolivka1!=0){
               dolivka1=f_profit(magic1);
               double tradelot=firstlot*MathPow(koefmartin,cdolivka1);
               double tradelot2=firstlot2*MathPow(koefmartin2,cdolivka1);
               if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic1,activ1)<0))
               if(OrderSend(activ1,OP_SELL,tradelot,
               SymbolInfoDouble(activ1,SYMBOL_BID),Slippage,0,0,Komment,magic1,0,clrRed)){}
               if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic1,activ2)<0))
               if(OrderSend(activ2,OP_BUY,tradelot2,
               SymbolInfoDouble(activ2,SYMBOL_ASK),Slippage,0,0,Komment,magic1,0,clrBlue)){}
               cdolivka1++;
            }*/
           }
         if(MathAbs(ddinpercent)>0)
           {
            if(100.0*(f_profit(magic1)/AccountInfoDouble(ACCOUNT_BALANCE))
               <=(-1)*MathAbs(ddinpercent)&&dolivka1perc==0)
              {
               dolivka1perc=100.0*(f_profit(magic1)/AccountInfoDouble(ACCOUNT_BALANCE));
               cdolivka1perc=1;
               double tradelot=firstlot*MathPow(koefmartin,cdolivka1perc);
               double tradelot2=firstlot2*MathPow(koefmartin2,cdolivka1perc);
               if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic1,activ1)<0))
                  if(OrderSend(activ1,OP_SELL,
                               MathFloor(tradelot/SymbolInfoDouble(activ1,SYMBOL_VOLUME_STEP))*SymbolInfoDouble(activ1,SYMBOL_VOLUME_STEP),
                               SymbolInfoDouble(activ1,SYMBOL_BID),Slippage,0,0,Komment,magic1,0,clrRed)) {}
               if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic1,activ2)<0))
                  if(OrderSend(activ2,OP_BUY,
                               MathFloor(tradelot2/SymbolInfoDouble(activ2,SYMBOL_VOLUME_STEP))*SymbolInfoDouble(activ2,SYMBOL_VOLUME_STEP),
                               SymbolInfoDouble(activ2,SYMBOL_ASK),Slippage,0,0,Komment,magic1,0,clrBlue)) {}
               cdolivka1perc++;
              }
            /*if(100.0*(f_profit(magic1)/AccountInfoDouble(ACCOUNT_BALANCE))
            <=(-1)*MathAbs(ddinpercent)&&dolivka1perc!=0){
               dolivka1perc=100.0*(f_profit(magic1)/AccountInfoDouble(ACCOUNT_BALANCE));
               double tradelot=firstlot*MathPow(koefmartin,cdolivka1perc);
               double tradelot2=firstlot2*MathPow(koefmartin2,cdolivka1perc);
               if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic1,activ1)<0))
               if(OrderSend(activ1,OP_SELL,tradelot,
               SymbolInfoDouble(activ1,SYMBOL_BID),Slippage,0,0,Komment,magic1,0,clrRed)){}
               if(lossdolivka==net||(lossdolivka==da&&f_profit_mag_sym(magic1,activ2)<0))
               if(OrderSend(activ2,OP_BUY,tradelot2,
               SymbolInfoDouble(activ2,SYMBOL_ASK),Slippage,0,0,Komment,magic1,0,clrBlue)){}
               cdolivka1perc++;
            }*/
           }
        }
     }
   if(tralprofita==net)
     {
      if(startprofitmoney>0)
        {
         if(f_profit(magic1)>=startprofitmoney&&f_count_of_magic(magic2)>0)
            f_close(magic1);
         if(f_profit(magic2)>=startprofitmoney&&f_count_of_magic(magic1)>0)
            f_close(magic2);
        }
      if(startprofitpercent>0)
        {
         if(100.0*(f_profit(magic1)/AccountInfoDouble(ACCOUNT_BALANCE))>=startprofitpercent&&f_count_of_magic(magic2)>0)
            f_close(magic1);
         if(100.0*(f_profit(magic2)/AccountInfoDouble(ACCOUNT_BALANCE))>=startprofitpercent&&f_count_of_magic(magic1)>0)
            f_close(magic2);
        }
     }
   else
     {
      if(f_profit(magic1)>=starttralaprofita&&tralmag1==0&&f_count_of_magic(magic2)>0)
        {
         tralmag1=f_profit(magic1);
         if(starttrala==da)
            Alert("алерт на старт трала профита");
        }
      if(f_profit(magic1)>=tralmag1+shagtralaprofita&&tralmag1>0&&f_count_of_magic(magic2)>0)
        {
         tralmag1=f_profit(magic1);
         if(shagtrala==da)
            Alert("алерт на каждый шаг трала профита");
        }
      if(f_profit(magic1)<=tralmag1-shagtralaprofita&&tralmag1>0&&f_count_of_magic(magic2)>0)
        {
         f_close(magic1);
        }
      if(f_profit(magic2)>=starttralaprofita&&tralmag2==0&&f_count_of_magic(magic1)>0)
        {
         tralmag2=f_profit(magic2);
         if(starttrala==da)
            Alert("алерт на старт трала профита");
        }
      if(f_profit(magic2)>=tralmag2+shagtralaprofita&&tralmag2>0&&f_count_of_magic(magic1)>0)
        {
         tralmag2=f_profit(magic2);
         if(shagtrala==da)
            Alert("алерт на каждый шаг трала профита");
        }
      if(f_profit(magic2)<=tralmag2-shagtralaprofita&&tralmag2>0&&f_count_of_magic(magic1)>0)
        {
         f_close(magic2);
        }
     }
   if(timeinterval==da)
     {
      datetime tstart=StringToTime(IntegerToString(YearMQL4())+"."+IntegerToString(MonthMQL4())+"."
                                   +IntegerToString(DayMQL4())+" "+IntegerToString(starthour)+":"+IntegerToString(startminute)+":00");
      datetime tend=StringToTime(IntegerToString(YearMQL4())+"."+IntegerToString(MonthMQL4())+"."
                                 +IntegerToString(DayMQL4())+" "+IntegerToString(endhour)+":"+IntegerToString(endminute)+":00");
      if(TimeCurrent()<tstart)
         return;
      if(TimeCurrent()>tend)
        {
        

Показано первые 50% кода (символов: 27929)

Как получить полную версию?

Введите ваш email и нажмите кнопку, чтобы перейти к оплате.