← К каталогу
Исходный код · ID 2783

anti-martingale by ma.mq4

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Получить полный код

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

???//+------------------------------------------------------------------+

#include <IncludeExample.mqh>
#include <stdlib.mqh>

#property version   "1.00"
#property strict

extern double InitalLotSize=0.5;
extern double StopLoss=50;
extern double TrailingStopLoss=50;
extern double TrailingMinProfit=-100;
extern double AntiMartingaleStopLoss=50;
extern double AntiMartingaleMinLotInc=0.1;
extern double TakeProfit=100;
extern double EquityRiskPercentage=4;

extern int Slippage=5;
extern int MagicNumber=123;

extern int FastMAPeriod = 10;
extern int SlowMAPeriod = 20;

extern bool useAntiMartingale=true;
extern bool CheckOncePerBar=true;
extern bool useTimer=false;
extern bool useLocalTimeInTimer=false;
extern string AllowedTradeStartTime="1970.1.1.0.0";
extern string AllowedTradeEndTime="2099.12.31.23.59";

int BuyTicket;
int SellTicket;
double UsePoint;
int UseSlippage;
datetime currentTimeStamp;

input bool     DynamicLotSize=true;

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

void OnDeinit(const int reason)
  {

  }

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

   double BuyStopLoss=0;
   double BuyTakeProfit=0;

   double OpenPrice=0;
   double SellStopLoss=0;
   double SellTakeProfit=0;
   bool newBar=false;
   int barShift=0;
   bool isTradeAllowed=false;
   datetime currentTime=TimeLocal();

   datetime tradeStartTime=StrToTime(AllowedTradeStartTime);
   datetime tradeEndTime=StrToTime(AllowedTradeEndTime);

   if(useLocalTimeInTimer)
      currentTime=TimeLocal();
   else
      currentTime=TimeCurrent();

   if(useTimer)
     {
      if(currentTime<=tradeEndTime && currentTime>=tradeStartTime)
        {
         isTradeAllowed=true;
        }
      else
        {
         isTradeAllowed=false;
        }
     }
   else
      isTradeAllowed=true;

   if(CheckOncePerBar)
     {
      barShift=1;
      if(currentTimeStamp==Time[0])
        {

         newBar=false;
        }
      else
        {

         Alert("OnTick(): New time bar is drawn, should trigger trading algorithm.");
         currentTimeStamp=Time[0]; //Adjust currentTimeStamp to open time of latest K bar.
         newBar=true;
        }
     }

   if(newBar && isTradeAllowed) // Check trade condition is allowed to run
     {

      Alert("OnTick(): Trade condition true, trade decision started at ",currentTimeStamp);

      if(FastMAPeriod>=SlowMAPeriod)
        {

         string ErrLog;

         Alert("OnTick(): FastMAPeriod is longer than SlowMAPeriod, EA should not proceed.");
         ErrLog=StringConcatenate("OnTick(): FastMAPeriod is longer than SlowMAPeriod, EA should not proceed.");
         Print(ErrLog);
         return;
        }

      double FastMA = iMA(NULL,0, FastMAPeriod,0,MODE_SMA,PRICE_CLOSE,barShift);
      double SlowMA = iMA(NULL,0, SlowMAPeriod,0,MODE_SMA,PRICE_CLOSE,barShift);

      Alert("OnTick(): FastMA=",FastMA,",SlowMA=",SlowMA,", BuyTicket=",BuyTicket,",SellTicket=",SellTicket);

      if(FastMA>=SlowMA)
        {
         Alert("OnTick(): Buy action: FastMA=",FastMA,",SlowMA=",SlowMA,", BuyTicket=",BuyTicket,",SellTicket=",SellTicket);

         CloseAllSellOrders(Symbol(),MagicNumber,UseSlippage);
         Alert("OnTick(): SellMarketCount() now returns ",SellMarketCount(Symbol(),MagicNumber));
         if(SellMarketCount(Symbol(),MagicNumber)==0)
           {
            SellTicket=0;
            Alert("OnTick(): reset SellTicket to ",SellTicket);
           }

         CloseAllSellStopOrders(Symbol(),MagicNumber);
         Alert("OnTick(): SellStopCount() now returns ",SellStopCount(Symbol(),MagicNumber));
         CloseAllSellLimitOrders(Symbol(),MagicNumber);
         Alert("OnTick(): SellLimitCount() now returns ",SellLimitCount(Symbol(),MagicNumber));

         OpenPrice=Ask;
         int marketOrderCnt=BuyMarketCount(Symbol(),MagicNumber);
         if(marketOrderCnt==0)
           {

            InitalLotSize=CalcLotSize(DynamicLotSize,EquityRiskPercentage,StopLoss,InitalLotSize);
            InitalLotSize=VerifyLotSize(InitalLotSize);
            Alert("OnTick(): DynamicLotSize=",DynamicLotSize,", InitalLotSize=",InitalLotSize);

            if(StopLoss>0)
              {
               BuyStopLoss=CalcBuyStopLoss(Symbol(),StopLoss,OpenPrice);
               BuyStopLoss=AdjustBelowStopLevel(Symbol(),BuyStopLoss);
              }
            if(TakeProfit>0)
              {
               BuyTakeProfit=CalcBuyTakeProfit(Symbol(),TakeProfit,OpenPrice);
               BuyTakeProfit=AdjustAboveStopLevel(Symbol(),BuyTakeProfit);
              }
            BuyTicket=OpenBuyOrder(Symbol(),InitalLotSize,UseSlippage,MagicNumber);
            AddStopProfit(BuyTicket,BuyStopLoss,BuyTakeProfit);
            Alert("OnTick(): BuyTicket=",BuyTicket,", TP=",BuyTakeProfit,", SL=",BuyStopLoss);

            if(BuyTicket==-1)
              {

               Alert("OnTick(): Problem to open buy order, BuyTicket=",BuyTicket);
               BuyTicket=0;
               Alert("OnTick(): Problem to open buy order, now BuyTicket reset to ",BuyTicket);
              }
           }
         else if(marketOrderCnt>0 && useAntiMartingale)
           {

            double newLotShouldAdd=CalcMartingaleLotSize(MagicNumber,AntiMartingaleStopLoss,AntiMartingaleMinLotInc);
            bool selected=OrderSelect(BuyTicket,SELECT_BY_TICKET);
            if(selected==false)
              {
               int ErrorCode=GetLastError();
               string ErrDesc=ErrorDescription(ErrorCode);

               string ErrAlert=StringConcatenate(Symbol(),"OnTick(): Select First Buy Order - Error: ",Err

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

Что вы получите после оплаты

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода: 834 ₽