0
Сделал набросок: www.opentraders.ru/downloads/1103/



Вот этот момент подробно поясните со скринами?

Итого: если в день сработал ордер Buy Stop, в конце дня следует удалить все не сработавшие ордера Buy Stop; если в день сработал ордер Sell Stop, то в конце дня удаляем все ордера Sell Stop. Все отложенные ордера держим в рынке не более 3 дней. Так же не следует открывать обратных позиций к этим ордерам, тк эти уровни как отбойные уже могут не действовать.


avatar

AM2

  • 17 марта 2016, 22:07
0
Я здесь скидываю наброски функций, которые собирают информацию по ордерам, пишут ее в файл, затем читают из файла. Обмен данными между терминалами можно осуществить через текстовый файл и символические ссылки. Если писать копировщик с нуля без своих наработок это очень большой объем работы, не зря на фрилансе просят за копировщик по ТЗ от 200$.


//+------------------------------------------------------------------+
//|                                                       Export.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
struct Orders
  {
   int               Type;
   double            OpenPrice;
   double            Lots;
  };

Orders Order;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Log(string s="")
  {
//--- Открываем файл 
   int h=FileOpen("Buff.txt",FILE_READ|FILE_WRITE|FILE_TXT);
   FileWrite(h,s);
   FileClose(h); // закрываем файл 
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   while(!IsStopped())
     {
      for(int i=OrdersTotal()-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
           {
            if(OrderSymbol()==Symbol())
              {
               if(OrderType()==OP_BUY)
                 {
                  Order.Type=0;
                  Order.Lots=OrderLots();
                  Order.OpenPrice=OrderOpenPrice();
                 }
               if(OrderType()==OP_SELL)
                 {
                  Order.Type=1;
                  Order.Lots=OrderLots();
                  Order.OpenPrice=OrderOpenPrice();
                 }
              }
           }
        }
        
      Log(Symbol() +" "+ (string)Order.Type +" "+ (string)Order.Lots +" "+ (string)Order.OpenPrice);
      
      Comment("\n Order Type: ",Order.Type,
              "\n Order Lots: ",Order.Lots,
              "\n Order OpenPrice: ",Order.OpenPrice);

     }

  }
//+------------------------------------------------------------------+




//+------------------------------------------------------------------+
//|                                                       Import.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

int Type=0;
string s="";
double Lots=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),100,0,0,"",0,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   while(!IsStopped())
     {
      if(OrdersTotal()<1)
        {
         //--- Открываем файл 
         int h=FileOpen("Buff.txt",FILE_READ|FILE_TXT);
         s=FileReadString(h,100);
         Type=(int)StringSubstr(s,7,1);
         Lots=(double)StringSubstr(s,9,5);
         FileClose(h); // закрываем файл 
         
         if(Type<1) PutOrder(Type,Ask); 
         if(Type>0) PutOrder(Type,Ask);        
        }

      Comment("\n Order Type: ",Type,
              "\n Order Lots: ",Lots,
              "\n String: ",s);

     }
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 17 марта 2016, 19:17
0
В файлах были подобные, посмотрите.
avatar

AM2

  • 17 марта 2016, 17:12
0
так что, выложить тот что в инете нашел? или вы по своему замутите?


Мне интересно посмотреть что там внутри, но получится или нет не могу сказать, я такой никогда не делал.
avatar

AM2

  • 17 марта 2016, 17:09
0
Сделал скрипт для закрытия определенного типа ордеров.
www.opentraders.ru/downloads/1100/


input int CloseType=0;//0-BUY 1-SELL 2-BUY && SELL











//+------------------------------------------------------------------+
//|                                                    CloseType.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

#property show_inputs

input int Slip=100;
input int CloseType=0;//0-BUY 1-SELL 2-BUY && SELL
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll()
  {
   bool cl;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY && (CloseType<1 || CloseType>1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==OP_SELL && (CloseType>0 || CloseType>1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   CloseAll();
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 17 марта 2016, 11:13
0
Благодарю. Пока к этому варианту присматриваюсь: www.mql5.com/ru/code/10705
avatar

AM2

  • 17 марта 2016, 10:58
0
Александр, есть где то исходники копировщика? Насколько сложно написать его с нуля?
Хочу сделать свою основу.
avatar

AM2

  • 17 марта 2016, 10:28
0
Вот отлаженная версия уже для торговли: www.opentraders.ru/downloads/1099/

avatar

AM2

  • 16 марта 2016, 20:08
0
Здесь мне было интересно проверить идею. Все остальное уже не ко мне :) 
avatar

AM2

  • 16 марта 2016, 10:11
0
Доработка не удалась, хотя тех. задание было, элементарным.

Не удалась согласен. Это только кажется что все просто. То что можно быстро сделать делаю.
avatar

AM2

  • 16 марта 2016, 09:20
0
Мне нужен, общий профит в валюте 1$, но то, что при данном параметре получается, я уже описывал выше.

Если нужно все настолько досконально, это к платному. Здесь простые вещи и то что можно быстро сделать делаю.
avatar

AM2

  • 15 марта 2016, 23:47
0
Добавил функцию расчета профита и ставки и вывел их на экран. В тестере видно, что даже при таком простом входе профит постоянно увеличивается, если WIN Loss равны, если соотношение меньше 0.9 начинается слив при данной стратегии.
www.opentraders.ru/downloads/1098/


//+------------------------------------------------------------------+
//|                                                      Binarik.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 2;        // умножение лота
extern double MaxLot     = 5;        // максимальный лот
extern double Win        = 0.7;      // прибыль со ставки
extern int StopLoss      = 2000;     // лось
extern int TakeProfit    = 3000;     // язь
extern int StartHour     = 0;        // час начала торговли
extern int StartMin      = 30;       // минута начала торговли
extern int EndHour       = 23;       // час окончания торговли
extern int EndMin        = 30;       // минута окончания торговли
extern int TimeFrame     = 60;       // период графика
extern int Slip          = 30;       // реквот
extern int Stavka        = 1;        // ставка
extern int Shift         = 1;        // на каком баре сигнал индикатора
extern int Magic         = 123;      // магик
extern string Expiration = "5";      // истечение ордера
extern string IndName    = "IINWMARROWS alert";

double pr=0,st=Stavka;
int UP=0,DN=0;
datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 30.04.2009                                                     |
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    hb - часы времени начала торговли                                       |
//|    mb - минуты времени начала торговли                                     |
//|    he - часы времени окончания торговли                                    |
//|    me - минуты времени окончания торговли                                  |
//+----------------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0,int mb=0,int he=0,int me=0)
  {
   datetime db, de;           // Время начала и окончания работы
   int      hc;               // Часы текущего времени торгового сервера

   db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)hb+":"+(string)mb);
   de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)he+":"+(string)me);
   hc=TimeHour(TimeCurrent());

   if(db>=de)
     {
      if(hc>=he) de+=24*60*60; else db-=24*60*60;
     }

   if(TimeCurrent()>=db && TimeCurrent()<=de) return(True);
   else return(False);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
     }

   r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,Digits),Slip,sl,tp,Expiration,Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   if(UP>0)
     {
      PutOrder(0,Ask);
      t=TimeCurrent();
     }

   if(DN>0)
     {
      PutOrder(1,Bid);
      t=TimeCurrent();
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;

   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderProfit()<0)
        {
         lot=OrderLots()*KLot;
         pr-=st;
         st*=KLot;        
        }
      if(OrderProfit()>0)
        {
         pr+=st*Win;
         st=Stavka;        
        }        
     }
   if(lot>MaxLot)lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll()
  {
   bool cl;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==OP_SELL)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double up = iCustom(NULL,0,IndName,0,Shift);
   double dn = iCustom(NULL,0,IndName,1,Shift);

   if(up<1000)
     {
      UP=1;
      DN=0;
     }

   if(dn<1000)
     {
      DN=1;
      UP=0;
     }

   if(CountTrades()<1 && isTradeTimeInt(StartHour,StartMin,EndHour,EndMin))
     {
      OpenPos();
     }
/**///

   if(TimeCurrent()-t>TimeFrame*60) CloseAll();
   Comment("\n up: ",up,
           "\n dn: ",dn,
           "\n UP: ",UP,
           "\n DN: ",DN,
           "\n t: ",t,
           "\n Profit: ",pr,
           "\n Stavka: ",st);

  }
//+------------------------------------------------------------------+

avatar

AM2

  • 15 марта 2016, 21:57
0
Идея интересная. Прогнал в тестере, может быть 9 проигрышей подряд. Но можно отрегулировать параметры индикатора, там основа машки, а лучше сразу заменить и проще будет подбирать параметры и снимать сигнал. Также в тестере можно подсчитывать профит по бо если добавить необходимые функции.




//+------------------------------------------------------------------+
//|                                                      Binarik.mq4 |
//|                                              Copyright 2016, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+

#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots       = 0.1;      // лот
extern double KLot       = 2;        // умножение лота
extern double MaxLot     = 5;        // максимальный лот
extern int StopLoss      = 2000;     // лось
extern int TakeProfit    = 3000;     // язь
extern int StartHour     = 0;        // час начала торговли
extern int StartMin      = 30;       // минута начала торговли
extern int EndHour       = 23;       // час окончания торговли
extern int EndMin        = 30;       // минута окончания торговли
extern int TimeFrame     = 60;       // период графика
extern int Slip          = 30;       // реквот
extern int Shift         = 1;        // на каком баре сигнал индикатора
extern int Magic         = 123;      // магик
extern string Expiration = "5";      // истечение ордера
extern string IndName    = "IINWMARROWS alert";

int UP=0,DN=0;
datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 30.04.2009                                                     |
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    hb - часы времени начала торговли                                       |
//|    mb - минуты времени начала торговли                                     |
//|    he - часы времени окончания торговли                                    |
//|    me - минуты времени окончания торговли                                  |
//+----------------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0,int mb=0,int he=0,int me=0)
  {
   datetime db, de;           // Время начала и окончания работы
   int      hc;               // Часы текущего времени торгового сервера

   db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)hb+":"+(string)mb);
   de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)he+":"+(string)me);
   hc=TimeHour(TimeCurrent());

   if(db>=de)
     {
      if(hc>=he) de+=24*60*60; else db-=24*60*60;
     }

   if(TimeCurrent()>=db && TimeCurrent()<=de) return(True);
   else return(False);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
     }

   r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,Digits),Slip,sl,tp,Expiration,Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {     
   if(UP>0)
     {
      PutOrder(0,Ask);
      t=TimeCurrent();
     }

   if(DN>0)
     {
      PutOrder(1,Bid);
      t=TimeCurrent();
     }     
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;

   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderProfit()<0)
        {
         lot=OrderLots()*KLot;
        }
     }
   if(lot>MaxLot)lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll()
  {
   bool cl;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==OP_SELL)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double up = iCustom(NULL,0,IndName,0,Shift);
   double dn = iCustom(NULL,0,IndName,1,Shift);

   if(up<1000)
     {
      UP=1;
      DN=0;
     }

   if(dn<1000)
     {
      DN=1;
      UP=0;
     }

   if(CountTrades()<1 && isTradeTimeInt(StartHour,StartMin,EndHour,EndMin))
     {
      OpenPos();
     }
/*

   //if(TimeCurrent()-t>TimeFrame*60) CloseAll();
   Comment("\n up: ",up,
           "\n dn: ",dn,
           "\n UP: ",UP,
           "\n DN: ",DN,
           "\n t: ",t);
*/
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 15 марта 2016, 21:10
0
Покажите скрин настроек которые у вас сейчас стоят?
avatar

AM2

  • 15 марта 2016, 20:04
0
Править усреднители это такая морока, даже свои. Нет не возьмусь.
avatar

AM2

  • 15 марта 2016, 17:01
0
Но серия усредняющих ордеров, закрывается по достижении суммы прибыли, в валюте депозита, заданной в настройках советника, не учитывая установленные t/p. Значит, значения t/p, при открытии серии ордеров, выставляются не верно.


Почему неверно? Просто ставьте значения профита в валюте больше и будет крыть по общему тейку.

avatar

AM2

  • 15 марта 2016, 11:19
+1
Cделано: www.opentraders.ru/downloads/1097/


Форекс индикатор Parabolic SAR of MA mtf – это мультитаймфреймовый трендовый индикатор,
построенный на сочетании двух самых популярных индикаторов тренда – Параболика и скользящей средней.
Скользящая средняя меняет свой цвет в зависимости от направления тренда,
которое определяется посредством Параболика.
Пересечение цены и скользящей средней индикатор Parabolic SAR of MA mtf расценивает как точку входа в рынок.
Техническое задание советник EA — Rozario v.1
для торгового терминала МТ4
В советнике используются индикаторы:
1.пользовательский индикатор Parabolic SAR of MA mtf /прилагается/
1. StopLoss и Takeprofit
• начало работы советника /час, мин 00-00/ часы и минуты
• окончание работы советник /час, мин 00-00/ часы и минуты
• Функция выхода из позиции одновременно с окончанием работы советника
Magic

2. Условия входа и выхода
А/ Вход в длинную позицию осуществляется по следующему условию:

На баре /свече/ открывающейся и при появлении зеленого кружка /сигнала/индикатора Parabolic SAR of MA mtf;
Рыночная цена больше значения Parabolic SAR of MA mtf.
Выход из длинной позиции происходит, если выполнено, хотя бы одно из следующих условий:
1. Выполнены условия для входа в короткую позицию.
2. Выход по ордеру стоп-лосс или тейк-профит.
3. Выход в конце работы советника (при включенной опции).
В/ Вход в короткую позицию осуществляется по следующему условию:
На баре /свече/ открывающейся и при появлении красного кружка /сигнала/индикатора Parabolic SAR of MA mtf;
Рыночная цена меньше значения Parabolic SAR of MA mtf.

Выход из короткой позиции происходит, если выполнено, хотя бы одно из следующих условий:
1. Выполнены условия для входа в длинную позицию.
2. Выход по ордеру стоп-лосс или тейк-профит.
3. Выход в конце работы советника при включенной опции).

avatar

AM2

  • 15 марта 2016, 09:12