Нужен скрип для теста стратегии в МТ4

MQL4 Скрипты

Работа завершена

Время выполнения 23 часа

Техническое задание

Здравствуйте, нужен скрипт который запускает автоматические сделки по заданным параметрам на мт4 вот пример 

//+------------------------------------------------------------------+
//|                                             ExpDualOrders_v1.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property strict
//----
input int         StartType =1;     //0-старт BUY, 1-старт SELL
input int  TypeCloseBuyTake =0;     //0-BUY после Take BUY, 1-SELL после Take BUY
input int  TypeCloseBuyLoss =1;     //0-BUY после Loss BUY, 1-SELL после Loss BUY
input int TypeCloseSellTake =1;     //0-BUY после Take SELL, 1-SELL после Take SELL
input int TypeCloseSellLoss =0;     //0-BUY после Loss SELL, 1-SELL после Loss SELL
input double        LotsBuy =2.0;   //лот ордера BUY
input int       StopLossBuy =100;   //StopLoss ордера BUY
input int     TakeProfitBuy =150;   //TakeProfit ордера BUY
input double       LotsSell =1.0;   //лот ордера SELL
input int      StopLossSell =100;   //StopLoss ордера SELL
input int    TakeProfitSell =150;   //TakeProfit ордера SELL
input int             Magic =12345; //Magic
//----
MqlTick str;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//----
//----первоначальное открытие ордера BUY
   if(StartType==0)
      if(FindLastOrderTradeType(-1)==false)
         if(FindLastOrderHistoryType(-1)==false)
            if(SymbolInfoTick(_Symbol,str)==true)
              {
               int slip=int((str.ask-str.bid)/_Point);
               double sl=str.ask-StopLossBuy*_Point;
               double tp=str.ask+TakeProfitBuy*_Point;
               //----
               if(OrderSend(_Symbol,OP_BUY,LotsBuy,str.ask,slip,sl,tp,"",Magic,0,clrBlue)>0)
                 {}
              }
//----
//----первоначальное открытие ордера SELL
   if(StartType==1)
      if(FindLastOrderTradeType(-1)==false)
         if(FindLastOrderHistoryType(-1)==false)
            if(SymbolInfoTick(_Symbol,str)==true)
              {
               int slip=int((str.ask-str.bid)/_Point);
               double sl=str.bid+StopLossBuy*_Point;
               double tp=str.bid-TakeProfitBuy*_Point;
               //----
               if(OrderSend(_Symbol,OP_SELL,LotsSell,str.bid,slip,sl,tp,"",Magic,0,clrRed)>0)
                 {}
              }
//----
//----открытие ордера BUY после ордера BUY закрытого по Take
   if(TypeCloseBuyTake==0)
      if(FindLastOrderHistoryType(-1)==true)
         if(OrderType()==OP_BUY)
            if(StringFind(OrderComment(),"tp",0)>=0)
               if(FindLastOrderTradeType(-1)==false)
                  if(SymbolInfoTick(_Symbol,str)==true)
                    {
                     int slip=int((str.ask-str.bid)/_Point);
                     double sl=str.ask-StopLossBuy*_Point;
                     double tp=str.ask+TakeProfitBuy*_Point;
                     //----
                     if(OrderSend(_Symbol,OP_BUY,LotsBuy,str.ask,slip,sl,tp,"",Magic,0,clrBlue)>0)
                       {}
                    }
//----
//----открытие ордера SELL после ордера BUY закрытого по Take
   if(TypeCloseBuyTake==1)
      if(FindLastOrderHistoryType(-1)==true)
         if(OrderType()==OP_BUY)
            if(StringFind(OrderComment(),"tp",0)>=0)
               if(FindLastOrderTradeType(-1)==false)
                  if(SymbolInfoTick(_Symbol,str)==true)
                    {
                     int slip=int((str.ask-str.bid)/_Point);
                     double sl=str.bid+StopLossBuy*_Point;
                     double tp=str.bid-TakeProfitBuy*_Point;
                     //----
                     if(OrderSend(_Symbol,OP_SELL,LotsSell,str.bid,slip,sl,tp,"",Magic,0,clrRed)>0)
                       {}
                    }
//----
//----открытие ордера BUY после ордера BUY закрытого по Loss
   if(TypeCloseBuyLoss==0)
      if(FindLastOrderHistoryType(-1)==true)
         if(OrderType()==OP_BUY)
            if(StringFind(OrderComment(),"sl",0)>=0)
               if(FindLastOrderTradeType(-1)==false)
                  if(SymbolInfoTick(_Symbol,str)==true)
                    {
                     int slip=int((str.ask-str.bid)/_Point);
                     double sl=str.ask-StopLossBuy*_Point;
                     double tp=str.ask+TakeProfitBuy*_Point;
                     //----
                     if(OrderSend(_Symbol,OP_BUY,LotsBuy,str.ask,slip,sl,tp,"",Magic,0,clrBlue)>0)
                       {}
                    }
//----
//----открытие ордера SELL после ордера BUY закрытого по Loss
   if(TypeCloseBuyLoss==1)
      if(FindLastOrderHistoryType(-1)==true)
         if(OrderType()==OP_BUY)
            if(StringFind(OrderComment(),"sl",0)>=0)
               if(FindLastOrderTradeType(-1)==false)
                  if(SymbolInfoTick(_Symbol,str)==true)
                    {
                     int slip=int((str.ask-str.bid)/_Point);
                     double sl=str.bid+StopLossBuy*_Point;
                     double tp=str.bid-TakeProfitBuy*_Point;
                     //----
                     if(OrderSend(_Symbol,OP_SELL,LotsSell,str.bid,slip,sl,tp,"",Magic,0,clrRed)>0)
                       {}
                    }
//----
//----открытие ордера BUY после ордера SELL закрытого по Take
   if(TypeCloseSellTake==0)
      if(FindLastOrderHistoryType(-1)==true)
         if(OrderType()==OP_SELL)
            if(StringFind(OrderComment(),"tp",0)>=0)
               if(FindLastOrderTradeType(-1)==false)
                  if(SymbolInfoTick(_Symbol,str)==true)
                    {
                     int slip=int((str.ask-str.bid)/_Point);
                     double sl=str.ask-StopLossBuy*_Point;
                     double tp=str.ask+TakeProfitBuy*_Point;
                     //----
                     if(OrderSend(_Symbol,OP_BUY,LotsBuy,str.ask,slip,sl,tp,"",Magic,0,clrBlue)>0)
                       {}
                    }
//----
//----открытие ордера SELL после ордера SELL закрытого по Take
   if(TypeCloseSellTake==1)
      if(FindLastOrderHistoryType(-1)==true)
         if(OrderType()==OP_SELL)
            if(StringFind(OrderComment(),"tp",0)>=0)
               if(FindLastOrderTradeType(-1)==false)
                  if(SymbolInfoTick(_Symbol,str)==true)
                    {
                     int slip=int((str.ask-str.bid)/_Point);
                     double sl=str.bid+StopLossBuy*_Point;
                     double tp=str.bid-TakeProfitBuy*_Point;
                     //----
                     if(OrderSend(_Symbol,OP_SELL,LotsSell,str.bid,slip,sl,tp,"",Magic,0,clrRed)>0)
                       {}
                    }
//----
//----открытие ордера BUY после ордера SELL закрытого по Loss
   if(TypeCloseSellLoss==0)
      if(FindLastOrderHistoryType(-1)==true)
         if(OrderType()==OP_SELL)
            if(StringFind(OrderComment(),"sl",0)>=0)
               if(FindLastOrderTradeType(-1)==false)
                  if(SymbolInfoTick(_Symbol,str)==true)
                    {
                     int slip=int((str.ask-str.bid)/_Point);
                     double sl=str.ask-StopLossBuy*_Point;
                     double tp=str.ask+TakeProfitBuy*_Point;
                     //----
                     if(OrderSend(_Symbol,OP_BUY,LotsBuy,str.ask,slip,sl,tp,"",Magic,0,clrBlue)>0)
                       {}
                    }
//----
//----открытие ордера SELL после ордера SELL закрытого по Loss
   if(TypeCloseSellLoss==1)
      if(FindLastOrderHistoryType(-1)==true)
         if(OrderType()==OP_SELL)
            if(StringFind(OrderComment(),"sl",0)>=0)
               if(FindLastOrderTradeType(-1)==false)
                  if(SymbolInfoTick(_Symbol,str)==true)
                    {
                     int slip=int((str.ask-str.bid)/_Point);
                     double sl=str.bid+StopLossBuy*_Point;
                     double tp=str.bid-TakeProfitBuy*_Point;
                     //----
                     if(OrderSend(_Symbol,OP_SELL,LotsSell,str.bid,slip,sl,tp,"",Magic,0,clrRed)>0)
                       {}
                    }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool FindLastOrderTradeType(int order_type)
  {
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
      if(OrderSelect(pos,SELECT_BY_POS)==true)
         if(OrderMagicNumber()==Magic)
            if(OrderSymbol()==_Symbol)
               if(OrderType()==order_type
                  || order_type==-1)
                  return(true);
//----
   return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool FindLastOrderHistoryType(int order_type)
  {
   for(int pos=OrdersHistoryTotal()-1;pos>=0;pos--)
      if(OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY)==true)
         if(OrderMagicNumber()==Magic)
            if(OrderSymbol()==_Symbol)
               if(OrderType()==order_type
                  || order_type==-1)
                  return(true);
//----
   return(false);
  }
//+------------------------------------------------------------------+
22:07

А конкретнее по тому что нужно вот тз

BUY - купить
SELL - продать
StopLoss - СЛ
TakeProfit - ТП
1)Открываем лот BUY-1 задаем в скрипте ТП и СЛ и сумму лота(например1)
Если ТП снова открываем лот BUY-1
2)Если СЛ открываем лот SELL-1 в скрипте задаем ТП и СЛ и сумму лота(например1)
Если ТП снова открываем лот BUY-1
3)Если СЛ Открываем лот BUY-2 задаем в скрипте ТП и СЛ и сумму лота(например1)
Если ТП снова открываем лот BUY-1
4)Если СЛ открываем лот SELL-3 в скрипте задаем ТП и СЛ и сумму лота(например1)
Если ТП снова открываем лот BUY-1
И так далее BUY-4 , SELL-5 , BUY-6 и т.д по такому алгоритму сколько угодно строк. Всегда Если ТП то алгоритм начинается по новой.

Откликнулись

1
Разработчик 1
Оценка
(76)
Проекты
134
44%
Арбитраж
11
27% / 64%
Просрочено
26
19%
Свободен
2
Разработчик 2
Оценка
(1126)
Проекты
1428
62%
Арбитраж
21
57% / 10%
Просрочено
43
3%
Свободен
3
Разработчик 3
Оценка
(400)
Проекты
703
49%
Арбитраж
57
16% / 49%
Просрочено
129
18%
Свободен

Информация о проекте

Бюджет
40- USD
Сроки выполнения
до 5 дн.