0
Только что проверил, основные позы тралит. Значит сейчас ставлю сетку и смотрю тралит лок или нет.
avatar

AM2

  • 14 января 2016, 22:38
0
Андрей! меня усреднение вообще не интересует. оно там при такой стратегии не нужно. надо чтобы советник ордера тралил при этом не трогал лок.


Это что то новое, раньше было:

скринах видно что советник расставляет ордера через 25 пунктов. количество ордеров в настройках я ставлю разные. для разных пар по разному. к примеру на франке 25. значит советник выставит 26 ордеров. первый им не учитывается.
avatar

AM2

  • 14 января 2016, 22:30
0
Давайте будем последовательно решать по одному вопросу. Трал к основным ордерам работает нормально?
avatar

AM2

  • 14 января 2016, 22:21
0
Он имел ввиду чтоб не обязательно Вы занялись этим делом, а какой угодно другой программист)


Бесплатно маловероятно кто будет делать, только если это бомба на реале.
avatar

AM2

  • 14 января 2016, 22:16
0
Добавил увеличение лота и удаление меток:




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

//--- Inputs
extern double  Lot      = 0.01;     //объем первого ордера
extern double  KLot     = 1;        //умножение лота Stop ордеров 
extern double  PlusLot  = 0.01;     //прибавлять это значение к лоту последующих ордеров
extern double  MinusLot = 0.00;     //отнимать это значение от лота предыдущего ордера

extern int StopLoss     = 0;        // лось
extern int TakeProfit   = 0;        // язь
extern int StopLimit    = 3;        // 0-бай и байлимит. 1-селл и селллимит. 2-бай и байстоп. 3-селл и селлстоп
extern int DigitsLot    = 2;        // округление значения лота
extern int Slip         = 3;        // реквот
extern int Step         = 100;      // шаг ордеров
extern int Count        = 5;        // количество ордеров
extern int Magic        = 123;      // магик

double lot=Lot;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   Comment("");
   ObjectsDeleteAll();
   return(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(StopLoss>0)   sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0)   sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,lot,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   if(StopLimit==0)
     {
      PutOrder(0,Ask);
      for(int i=0; i<=Count;i++)
        {
         PutOrder(2,Ask-Step*Point*i);
         lot=NormalizeDouble(lot*KLot+PlusLot-MinusLot,DigitsLot);
        }
     }

   if(StopLimit==1)
     {
      PutOrder(1,Bid);
      for(int i=0; i<=Count;i++)
        {
         PutOrder(3,Bid+Step*Point*i);
         lot=NormalizeDouble(lot*KLot+PlusLot-MinusLot,DigitsLot);
        }
     }

   if(StopLimit==2)
     {
      PutOrder(0,Ask);
      for(int i=0; i<=Count;i++)
        {
         PutOrder(4,Ask+Step*Point*i);
         lot=NormalizeDouble(lot*KLot+PlusLot-MinusLot,DigitsLot);
        }
     }

   if(StopLimit==3)
     {
      PutOrder(1,Bid);
      for(int i=0; i<=Count;i++)
        {
         PutOrder(5,Bid-Step*Point*i);
         lot=NormalizeDouble(lot*KLot+PlusLot-MinusLot,DigitsLot);
        }
     }

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

avatar

AM2

  • 14 января 2016, 11:51
0
Сделал трал только усредняющих поз, и вывод в бу на шаг трала.
www.opentraders.ru/downloads/1008/

avatar

AM2

  • 14 января 2016, 02:15
0
Может возможно параметр на закрытие худших ордеров сделать процентным?
Если допустим ставим 50%, вошло в рынок шесть ордеров — бу втыкается трём худшим, вошло десять — бу втыкается пяти худшим.
Если ставим 40%, вошло в рынок пять ордеров — бу втыкается двум худшим, вошло десять — бу втыкается четырём худшим.


Анатолий, сделать процентное бу можно, только мне нужно видеть на графике такую ситуацию, как я обычно прошу скрины в студию, чтобы я смог смоделировать в тестере и отладить советник.

Та же версия советника выведет в бу указанные ордера если цена развернулась.

avatar

AM2

  • 14 января 2016, 01:41
0
Этот и править потом одно удовольствие <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '>&nbsp;  www.opentraders.ru/downloads/1010/

//--- Inputs
extern double Lots      = 0.1;      // лот
extern int StopLoss     = 0;        // лось
extern int TakeProfit   = 0;        // язь
extern int StopLimit    = 3;        // 0-бай и байлимит. 1-селл и селллимит. 2-бай и байстоп. 3-селл и селлстоп
extern int Slip         = 3;        // реквот
extern int Step         = 100;      // шаг ордеров
extern int Count        = 5;        // количество ордеров
extern int Magic        = 123;      // магик

avatar

AM2

  • 13 января 2016, 22:30
0
А его никак не научить 1й ордер открывать рыночным, а остальную сеть достраивать лимитками?


Лучше напишу с нуля, так проще чем искать и править чужой код.
avatar

AM2

  • 13 января 2016, 21:56
0
Поставил кимовский трал, он сразу сработал, наблюдаю дальше.
www.opentraders.ru/downloads/1008/
avatar

AM2

  • 13 января 2016, 20:25
0
До лока мы еще не добрались, нужно ставить какой то другой трал. У меня на демо тоже через раз работает.
avatar

AM2

  • 13 января 2016, 20:00
0
Посмотрите:


//+------------------------------------------------------------------+
//|                                                        OtBoy.mq4 |
//|                                              Copyright 2015, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property description "Simple expert advisor"

#include <stdlib.mqh>

//--- Inputs
extern double Lots          = 0.1; //лот
extern int    StopLoss      = 500; //стоплосс отложенного ордера(если 0 то на предыдущий хай или лоу)
extern int    TakeProfit    = 500; //тейкпрофит  отложенного ордера
extern int    Delta         = 100; //расстояние от лоу или хая
extern int    StartHour     = 0;   //час начала торговли
extern int    StartMin      = 30;  //минута начала торговли
extern int    EndHour       = 23;  //час окончания торговли
extern int    EndMin        = 30;  //минута окончания торговли
extern int    StopLimit     = 0;   //0-stop 1-limit
extern int    Slip          = 0;   //проскальзывание ордеров
extern int    Spread        = 20;  //спред
extern int    Count         = 8;   //баров для расчета
extern int    Magic         = 123; //магик
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   Comment("");
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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()==OP_BUY || OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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)+" "+hb+":"+mb);
   de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+he+":"+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 DelAllOrders()
  {
   bool del=true;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderMagicNumber()==Magic || OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUYSTOP) del=OrderDelete(OrderTicket());
            if(OrderType()==OP_SELLSTOP) del=OrderDelete(OrderTicket());
            if(OrderType()==OP_BUYLIMIT) del=OrderDelete(OrderTicket());
            if(OrderType()==OP_SELLLIMIT) del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr;
   double sl=0,tp=0;

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0)   sl=NormalizeDouble(price+StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits);
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0)   sl=NormalizeDouble(price-StopLoss*Point,Digits);
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits);
     }

   r=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountOrders(int type)
  {
   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()==type) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   int spread=MarketInfo(NULL,MODE_SPREAD);
   double Max=High[iHighest(NULL,0,MODE_HIGH,Count,1)];
   double Min= Low[iLowest(NULL,0,MODE_LOW,Count,1)];

   if(CountTrades()>0) DelAllOrders();
   if(CountTrades()<1 && isTradeTimeInt(StartHour,StartMin,EndHour,EndMin) && spread<=Spread)
     {
      if(StopLimit==0)
        {
         if(CountOrders(4)<1) PutOrder(4,Max+Delta*Point);
         if(CountOrders(5)<1) PutOrder(5,Min-Delta*Point);
        }

      if(StopLimit==1)
        {
         if(CountOrders(3)<1) PutOrder(3,Max+Delta*Point);
         if(CountOrders(2)<1) PutOrder(2,Min-Delta*Point);
        }
     }
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 13 января 2016, 06:02
0
Хорошая панелька. Все работает! www.opentraders.ru/downloads/1009/

avatar

AM2

  • 13 января 2016, 05:16
0
Я днем еще поставлю на разных парах.
avatar

AM2

  • 13 января 2016, 04:58
0
Скрипт поправил:




//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Хлыстов Владимир"
#property link      ""
#property show_inputs
/*--------------------------------------------------------------------
скрипт определяет цену, куда мы его бросили и от нее строит сеть отложенных ордеров
если ниже цены, то BuyLimit, если выше, то SellLimit 
//--------------------------------------------------------------------*/
extern int      Step           = 50;       //расстояние (в пунктах) между ордерами
extern int      Orders         = 5;        //кол-во ордеров сетки
extern int      Type           = 1;        //1-BuyLimit 2-SellLimit
extern int      Magic          = 0;        //уникальный номер ордера

extern double   Lot=0.01;      //объем первого Stop ордера
extern double   K_Lot=1;        //умножение лота Stop ордеров 
extern double   PlusLot        = 0.00;      //прибавлять это значение к лоту последующих ордеров
extern double   MinusLot       = 0.00;      //отнимать это значение от лота предыдущего ордера

extern int      DigitsLot=2;        //округление значения лота

extern int      stoploss=0;       //уровень выставления SL, если 0, то SL не выставляется
extern int      takeprofit=0;      //уровень выставления TP, если 0, то TP не выставляется
extern int      Expiration= 0;     //Срок истечения отложенного ордера в минутах, если 0, то срок не ограничен (1440 - сутки)
extern int      attempts=10;       //кол-во попыток открытия ордера 
//--------------------------------------------------------------------
string txt;
int n,slippage=3,STOPLEVEL;
datetime expiration;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|        Deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   if(Expiration>0) expiration=TimeCurrent()+Expiration*60; else expiration=0;
   STOPLEVEL=MarketInfo(Symbol(),MODE_STOPLEVEL);
   if(Digits==3 || Digits==5) slippage=30;
   double Price;
   double LOT=Lot;

   Price=NormalizeDouble(Close[0],Digits);

   for(int i=1; i<=Orders+1; i++)
     {
      if(Type==1)
        {
         OPENORDER(OP_BUYLIMIT,Price,LOT,i);
         Price=NormalizeDouble(Price-Step*Point,Digits);
        }
      if(Type==2)
        {
         OPENORDER(OP_SELLLIMIT,Price,LOT,i);
         Price=NormalizeDouble(Price+Step*Point,Digits);
        }
      LOT=NormalizeDouble(LOT*K_Lot+PlusLot-MinusLot,DigitsLot);
     }
   return(0);
  }
//--------------------------------------------------------------------
void OPENORDER(int ord,double Price,double L,int i)
  {
   int error,err;
   double SL,TP;
   while(true)
     {
      error=0;
      if(ord==OP_BUYSTOP)
        {
         if(takeprofit!=0) TP=NormalizeDouble(Price+takeprofit*Point,Digits); else TP=0;
         if(stoploss!=0) SL=NormalizeDouble(Price-stoploss*Point,Digits); else SL=0;
         error=OrderSend(Symbol(),ord,L,Price,slippage,SL,TP,"",Magic);
        }
      if(ord==OP_SELLSTOP)
        {
         if(takeprofit!=0) TP=NormalizeDouble(Price-takeprofit*Point,Digits); else TP=0;
         if(stoploss!=0) SL=NormalizeDouble(Price+stoploss*Point,Digits);  else SL=0;
         error=OrderSend(Symbol(),ord,L,Price,slippage,SL,TP,"",Magic);
        }
      if(ord==OP_SELLLIMIT)
        {
         if(takeprofit!=0) TP=NormalizeDouble(Price-takeprofit*Point,Digits); else TP=0;
         if(stoploss!=0) SL=NormalizeDouble(Price+stoploss*Point,Digits);  else SL=0;
         error=OrderSend(Symbol(),ord,L,Price,slippage,SL,TP,"",Magic);
        }
      if(ord==OP_BUYLIMIT)
        {
         if(takeprofit!=0) TP=NormalizeDouble(Price+takeprofit*Point,Digits); else TP=0;
         if(stoploss!=0) SL=NormalizeDouble(Price-stoploss*Point,Digits); else SL=0;
         error=OrderSend(Symbol(),ord,L,Price,slippage,SL,TP,"",Magic);
        }
      if(error==-1)
        {
         txt=StringConcatenate(txt,"\nError ",GetLastError());
         if(ord==OP_BUYSTOP)   txt = StringConcatenate(txt,"  OPENORDER BUYSTOP ",  i,"   Ask =",DoubleToStr(Ask,Digits),"   Lot =",DoubleToStr(L,DigitsLot),"   Price =",DoubleToStr(Price,Digits)," (",NormalizeDouble((Price-Ask)/Point,0),")  SL =",DoubleToStr(SL,Digits)," (",NormalizeDouble((Price-SL)/Point,0),")  TP=",DoubleToStr(TP,Digits)," (",NormalizeDouble((TP-Price)/Point,0),")  STOPLEVEL=",STOPLEVEL);
         if(ord==OP_SELLSTOP)  txt = StringConcatenate(txt,"  OPENORDER SELLSTOP ", i,"   Bid =",DoubleToStr(Bid,Digits),"   Lot =",DoubleToStr(L,DigitsLot),"   Price =",DoubleToStr(Price,Digits)," (",NormalizeDouble((Bid-Price)/Point,0),")  SL =",DoubleToStr(SL,Digits)," (",NormalizeDouble((SL-Price)/Point,0),")  TP=",DoubleToStr(TP,Digits)," (",NormalizeDouble((Price-TP)/Point,0),")  STOPLEVEL=",STOPLEVEL);
         if(ord==OP_SELLLIMIT) txt = StringConcatenate(txt,"  OPENORDER SELLLIMIT ",i,"   Ask =",DoubleToStr(Ask,Digits),"   Lot =",DoubleToStr(L,DigitsLot),"   Price =",DoubleToStr(Price,Digits)," (",NormalizeDouble((Price-Ask)/Point,0),")  SL =",DoubleToStr(SL,Digits)," (",NormalizeDouble((Price-SL)/Point,0),")  TP=",DoubleToStr(TP,Digits)," (",NormalizeDouble((TP-Price)/Point,0),")  STOPLEVEL=",STOPLEVEL);
         if(ord==OP_BUYLIMIT)  txt = StringConcatenate(txt,"  OPENORDER BUYLIMIT ", i,"   Bid =",DoubleToStr(Bid,Digits),"   Lot =",DoubleToStr(L,DigitsLot),"   Price =",DoubleToStr(Price,Digits)," (",NormalizeDouble((Bid-Price)/Point,0),")  SL =",DoubleToStr(SL,Digits)," (",NormalizeDouble((SL-Price)/Point,0),")  TP=",DoubleToStr(TP,Digits)," (",NormalizeDouble((Price-TP)/Point,0),")  STOPLEVEL=",STOPLEVEL);
         Print(txt);
         Comment(txt,"  ",TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
         err++;Sleep(1000);RefreshRates();
        }
      else
        {
         n++;
         return;
        }
      if(err>attempts) return;
     }
   return;
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 13 января 2016, 02:46
0
Поставьте комментарий в этой строке. Две косых линии поставьте просто.


//if(OrderSymbol()==Symbol() || OrderMagicNumber()==Magic)
avatar

AM2

  • 13 января 2016, 02:14
0
Я пробовал править этот код. Помню я тогда намучился. Нет не возьмусь.
avatar

AM2

  • 13 января 2016, 00:49
0
Сделал пока такой вариант. Указываем сколько верхних должно остаться, нижние уходят в БУ а верхние остаются.







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

input int    StopLoss    = 3000; // стоп лосс ордера
input int    TakeProfit  = 10;   // тейк профит ордера
input int    Orders      = 3;    // сколько ордеров оставляем
input int    Count       = 10;   // количество ордеров которое считает советник
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Mode(int from,int to)
  {
   double all=0;
   double count=0,tp=0,sl=0;

   for(int i=to-1;i>=from;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               all+=OrderOpenPrice();
               count++;
              }
           }
        }
     }
   if(count>0) all=NormalizeDouble(all/count,Digits);

   for(int i=to-1;i>=from;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY && OrderStopLoss()==0)
              {
               tp=NormalizeDouble(all+TakeProfit*Point,Digits);
               sl=NormalizeDouble(all-StopLoss*Point,Digits);
               bool mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Yellow);
              }
            else
            if(OrderType()==OP_SELL && OrderStopLoss()==0)
              {
               tp=NormalizeDouble(all-TakeProfit*Point,Digits);
               sl=NormalizeDouble(all+StopLoss*Point,Digits);
               bool mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Yellow);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double pr)
  {
   int r=0;
   color clr=clrNONE;

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

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

   r=OrderSend(NULL,type,0.1,NormalizeDouble(pr,Digits),0,0,0,"",0,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<=Count)
     {
      Mode(Orders,CountTrades());
     }

   if(IsTesting())
     {
      if(OrdersTotal()<1)
        {
         for(int i=1;i<=10;i++)
           {
            PutOrder(5,Bid-200*Point*i);
           }
        }
     }

   Comment("\n Остаток: ",MathMod(CountTrades(),2),
           "\n Позиций: ",CountTrades());
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 13 января 2016, 00:42
0
Опять морока с модификацией, сыпет ошибку 130.
Не работает эта функция:


void Mode1()
  {
   double tp=0;

   for(int i=OrdersTotal()-1;i>=5;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY)
              {
               tp=NormalizeDouble(OrderOpenPrice()+TakeProfit*Point,Digits);
               bool mod=OrderModify(OrderTicket(),OrderOpenPrice(),0,tp,0,Yellow);
              }
            else
            if(OrderType()==OP_SELL)
              {
               tp=NormalizeDouble(OrderOpenPrice()-TakeProfit*Point,Digits);
               bool mod=OrderModify(OrderTicket(),OrderOpenPrice(),0,tp,0,Yellow);
              }
           }
        }
     }
  }



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

input int    StopLoss    = 3000; // стоп лосс ордера
input int    TakeProfit  = 10;   // тейк профит ордера
input int    Param       = 0;    // 0-All. 1-N/2.
input int    Count       = 10;   // количество ордеров которое считает советник
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Mode(int from,int to)
  {
   double all=0;
   double count=0,tp=0,sl=0;

   for(int i=to-1;i>=from;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               all+=OrderOpenPrice();
               count++;
              }
           }
        }
     }
   if(count>0) all=NormalizeDouble(all/count,Digits);

   for(int i=to-1;i>=from;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY && OrderStopLoss()==0)
              {
               tp=NormalizeDouble(all+TakeProfit*Point,Digits);
               sl=NormalizeDouble(all-StopLoss*Point,Digits);
               bool mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Yellow);
              }
            else
            if(OrderType()==OP_SELL && OrderStopLoss()==0)
              {
               tp=NormalizeDouble(all-TakeProfit*Point,Digits);
               sl=NormalizeDouble(all+StopLoss*Point,Digits);
               bool mod=OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Yellow);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Mode1()
  {
   double tp=0;

   for(int i=OrdersTotal()-1;i>=5;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY)
              {
               tp=NormalizeDouble(OrderOpenPrice()+TakeProfit*Point,Digits);
               bool mod=OrderModify(OrderTicket(),OrderOpenPrice(),0,tp,0,Yellow);
              }
            else
            if(OrderType()==OP_SELL)
              {
               tp=NormalizeDouble(OrderOpenPrice()-TakeProfit*Point,Digits);
               bool mod=OrderModify(OrderTicket(),OrderOpenPrice(),0,tp,0,Yellow);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountOrders(int type)
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==type) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double pr)
  {
   int r=0;
   color clr=clrNONE;

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

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

   r=OrderSend(NULL,type,0.1,NormalizeDouble(pr,Digits),0,0,0,"",0,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(CountTrades()<=Count)
     {
      if(Param==0 && CountTrades()>1) Mode(1,CountTrades());
      if(Param==1 && Bid<1.12435) Mode1();
     }

   if(IsTesting())
     {
      if(OrdersTotal()<1)
        {
         for(int i=1;i<=10;i++)
           {
            PutOrder(5,Bid-200*Point*i);
           }
        }
     }

   Comment("\n Остаток: ",MathMod(CountTrades(),2),
           "\n Позиций: ",CountTrades());
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 12 января 2016, 23:15