MQL4 脚本 demo

未结帖
0 726
ajian admin_jim 2018-03-20
悬赏:5飞吻
//+------------------------------------------------------------------+
//|                                                     disaster.mq4 |
//|                                                         Max Fade |
//|                                                          http:// |
//+------------------------------------------------------------------+
#property copyright "Max Fade"
#property link      "http://"
extern double StopLoss = 30;
extern double TakeProfit = 70;
extern int MAPER = 590;
int Magic = 54321;

datetime TradeTimeOut;

int init()
  {
   return(0);
  }
int deinit()
  {
   return(0);
  }
int start()
  {
// информация по предыдущему ордеру
int preOrderType=-1,preTicket=0;
double prePriceOpen=0,prePriceClose=0,preTP=0,preSL=0;
bool STOPLEVELCHECK;
int i,j,k,l,ticket,err,nBars=0,numOrdersCount=0,numSLCount=0;
int total=OrdersTotal();
double Lot=0.0,PriceStop=0.0,PriceLimit=0.0,Price=0.0;
   if (TradeTimeOut==0) TradeTimeOut=CurTime();
   if ( TradeTimeOut > CurTime() ) return(0);
   if ( Bars < 1000) return(0);
   // обработка истории - поиск ордеров
   total=OrdersHistoryTotal();
   // начинаем выборку с конца, после найденного последнего ордера прерываем дальнейший поиск
   for (i=total;i>=0;i--)
      {
      if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) continue;
      if (OrderMagicNumber() == Magic)
         {
         preOrderType=OrderType();
         preTicket=OrderTicket();
         prePriceOpen=OrderOpenPrice();
         preTP=OrderTakeProfit();
         preSL=OrderStopLoss();
         prePriceClose=OrderClosePrice();
         // последний ордер нашли, больше нам ничего не нужно
         break;
         }
      }
   // выборка текущих позиций
      total=OrdersTotal();
      for (i=0;i<total;i++)
         {
         if (OrderSelect(i,SELECT_BY_POS)==false) continue;
         if (OrderMagicNumber() == Magic)
            {
            numOrdersCount++;
            // если цена отложенного ордера отличается от необходимого - модифицируем
            STOPLEVELCHECK = true;
            if (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)
               {
               Price=NormalizeDouble(iMA(NULL,PERIOD_M1,MAPER,0,MODE_SMA,PRICE_CLOSE,0),Digits);
               if (OrderType()==OP_BUYSTOP)
                  {
                  PriceStop=Price - MarketInfo(Symbol(),MODE_SPREAD)*Point - StopLoss * Point;
                  PriceLimit=Price + TakeProfit * Point;
                  STOPLEVELCHECK = (Price-Ask) > MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
                  if (preOrderType==OP_BUY && (prePriceOpen-prePriceClose)>0)
                     {
                     PriceLimit=Price + 0.5 * TakeProfit * Point;
                     }
                  }
               if (OrderType()==OP_SELLSTOP)
                  {
                  PriceStop=Price + StopLoss * Point;
                  PriceLimit=Price - MarketInfo(Symbol(),MODE_SPREAD)*Point - TakeProfit * Point;
                  STOPLEVELCHECK = (Bid-Price) > MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;
                  if (preOrderType==OP_SELL && (prePriceOpen-prePriceClose)<0)
                     {
                     PriceLimit=Price - MarketInfo(Symbol(),MODE_SPREAD)*Point - 0.5*TakeProfit * Point;
                     }
                  }
               if (NormalizeDouble(OrderOpenPrice()-Price,Digits)!=0 
                     && NormalizeDouble(OrderStopLoss()-PriceStop,Digits)!=0
                     && NormalizeDouble(OrderTakeProfit()-PriceLimit,Digits)!=0 && STOPLEVELCHECK)
                  {
                  OrderModify(OrderTicket(),Price, PriceStop, PriceLimit ,0,CLR_NONE);
                  }
               }
            Price=NormalizeDouble(iMA(NULL,PERIOD_M1,MAPER,0,MODE_SMA,PRICE_CLOSE,0),Digits);
            if (OrderType()==OP_BUY && Minute()/5==NormalizeDouble(Minute()/5,0) )
               {
               if (NormalizeDouble(Bid-OrderStopLoss()-70*Point,Digits)>0)
                  {
                  //OrderModify(OrderTicket(),OrderOpenPrice(),,0,0,CLR_NONE);
                  }
               }
            if (OrderType()==OP_SELL && Minute()/5==NormalizeDouble(Minute()/5,0) )
               {
               if (NormalizeDouble(OrderStopLoss()-Ask-70*Point,Digits)>0)
                  {
                  //OrderModify(OrderTicket(),OrderOpenPrice(),, 0,0,CLR_NONE);
                  }
               }
            }
         }
   Lot=NormalizeDouble(0.4*AccountFreeMargin()/1000,1);
   if (Lot>MarketInfo(Symbol(),MODE_MAXLOT)) Lot=MarketInfo(Symbol(),MODE_MAXLOT);
   //if (Lot>5) Lot=5.0;
   if (Lot<MarketInfo(Symbol(),MODE_MINLOT)) return(0);
   if (numOrdersCount==0) // если открытых ордеров нет - ставим отложенные ордера
   {
      Price=NormalizeDouble(iMA(NULL,PERIOD_M1,MAPER,0,MODE_SMA,PRICE_CLOSE,0),Digits);
      if (Bid-Price > 20 * Point)
         {
         ticket=OrderSend(Symbol(), OP_SELLSTOP, Lot ,
            Price, 1, Price + StopLoss * Point, Price - TakeProfit * Point, "MACROS2", Magic, 0, Red);
            //TradeTimeOut=TimeCurrent()+60*60*10;
         }
      if (Price-Ask > 20 * Point)
         {
         ticket=OrderSend(Symbol(), OP_BUYSTOP, Lot ,
            Price+MarketInfo(Symbol(),MODE_SPREAD)*Point, 1,
            Price + MarketInfo(Symbol(),MODE_SPREAD)*Point - StopLoss * Point,
            Price + MarketInfo(Symbol(),MODE_SPREAD)*Point + TakeProfit * Point, "MACROS2", Magic, 0, Red);
            //TradeTimeOut=TimeCurrent()+60*60*10;
         }
   }
   return(0);
  }


热忱回答0


最近热帖

近期热议

  1. javascript——prototype与__proto 9
  2. Mysql 中出现的Data truncated for column 3
  3. 在nginx中使用x-sendfile的解决方案 3
  4. 高版本jQuery面插件实现Ajax上传图片 1
  5. Thinkphp Socket.class.php 类的使用 1
  6. 使用ionic3创建第一个App 0
  7. ios-oc html5 0
  8. nginx.conf 0
  9. 基于ionic3.4.0的项目搭建 0
  10. php 缩略图 0