+1
Cделать можно, но на мой взгляд лучше выставить стоп для ордера на тот уровень где стоит тейк противоположного.
avatar

AM2

  • 29 апреля 2016, 08:43
0
Нашел способ как обойти перерасчет координат курсора в номер бара. Сейчас скрипт повесит фибо на указанную в настройках вершину зигзага. От этого уже можно дальше плясать.



//+------------------------------------------------------------------+
//|                                                   FiboScript.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property show_inputs
#property strict

input int ZZExtremum = 1;
input int Shift = 5;
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.10.2006                                                     |
//|  Описание : Возвращает номер бара экстремума ЗигЗага по его номеру.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    tf - таймфрейм                  (      0     - текущий ТФ)              |
//|    ne - номер экстремума           (      0     - последний)               |
//|    dp - ExtDepth                                                           |
//|    dv - ExtDeviation                                                       |
//|    bs - ExtBackstep                                                        |
//+----------------------------------------------------------------------------+
int GetExtremumZZBar(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bc=3) {
  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=0; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", dp, dv, bc, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(i);
    }
  }
  Print("GetExtremumZZBar(): Экстремум ЗигЗага номер ",ne," не найден");
  return(-1);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutFibo(string name)
  {
   int bar=GetExtremumZZBar(Symbol(),0,ZZExtremum);
   //ObjectDelete(name);
//--- создадим "Уровни Фибоначчи" по заданным координатам
   ObjectCreate(0,name,OBJ_FIBO,0,Time[bar],Close[bar],Time[bar-Shift],Close[bar-Shift]);
//--- установим цвет
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим толщину линии
   ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   PutFibo("FIBO");
  }
//+------------------------------------------------------------------+
avatar

AM2

  • 29 апреля 2016, 08:25
0
Перелопатил форум мкл, ничего подобного не нашел. Нужны примеры функций, подобные коды, без этого никуда. Не берусь я за этот скрипт.
avatar

AM2

  • 28 апреля 2016, 23:19
0
Вот самая примитивная основа. Теперь нужно каким то образом получать номер бара, куда кликаем мышкой.




//+------------------------------------------------------------------+
//|                                                   FiboScript.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutFibo(string name)
  {
   //ObjectDelete(name);
//--- создадим "Уровни Фибоначчи" по заданным координатам
   ObjectCreate(0,name,OBJ_FIBO,0,Time[1],Close[1],Time[5],Close[5]);
//--- установим цвет
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим толщину линии
   ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   PutFibo("FIBO");
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|                                                   FiboScript.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutFibo(string name)
  {
   //ObjectDelete(name);
//--- создадим "Уровни Фибоначчи" по заданным координатам
   ObjectCreate(0,name,OBJ_FIBO,0,Time[1],Close[1],Time[5],Close[5]);
//--- установим цвет
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим толщину линии
   ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   PutFibo("FIBO");
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 28 апреля 2016, 22:48
0
Может быть у вас есть подобный код, чтобы мне было хотя бы от чего оттолкнуться? Откуда вы взяли эту идею?
avatar

AM2

  • 28 апреля 2016, 21:24
0
Кидаем скрипт на вершинку. Я даже не представляю как это реализовать, никогда не делал такую штуку а значит это будет долго.
avatar

AM2

  • 28 апреля 2016, 17:29
+1
Сейчас не открыл больше двух поз обоих направлений:



Настройки такие:



Теперь все тоже с реверсом:

avatar

AM2

  • 28 апреля 2016, 17:18
0
В виде индикатора вариант: www.opentraders.ru/downloads/1161/


//+------------------------------------------------------------------+
//|                                                  BUIndicator.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 indicator_chart_window

extern int  Width        = 2;        // толщина линий

extern bool Buy          = true;     // отключение линии БУ бай
extern bool Sell         = true;     // отключение линии БУ селл
extern bool All          = true;     // отключение линии БУ всех

extern color BuyColor    = Blue;     // цвет линии БУ бай
extern color SellColor   = Red;      // цвет линии БУ селл
extern color AllColor    = Yellow;   // цвет линии БУ всех
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutLine(string name,double p,color clr)
  {
   ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_HLINE,0,0,p);
//--- установим цвет линии
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим толщину линии
   ObjectSetInteger(0,name,OBJPROP_WIDTH,Width);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Price(int type)
  {
   double pr=0,sum=0,lot=0;

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==0 && (type==0 || type==2))
              {
               sum+=OrderOpenPrice()*OrderLots();
               lot+=OrderLots();
              }

            if(OrderType()==1 && (type==1 || type==2))
              {
               sum-=OrderOpenPrice()*OrderLots();
               lot-=OrderLots();
              }
           }
        }
     }

   if(lot>0 || lot<0) pr=sum/lot;
   return(pr);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(Buy)  PutLine("BLine",Price(0),BuyColor);
   if(Sell) PutLine("SLine",Price(1),SellColor);
   if(All)  PutLine("ALine",Price(2),AllColor);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 28 апреля 2016, 10:26
0
Вывел настройки толщину, отключение линий. Комментарии и ордера только в режиме тестирования.


//+------------------------------------------------------------------+
//|                                                           BU.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 int StopLoss      = 0;        // лось
extern int TakeProfit    = 0;        // язь
extern int Width         = 2;        // толщина линий
extern int Slip          = 30;       // реквот
extern int Magic         = 0;        // магик

extern bool Buy          = true;     // отключение линии БУ бай
extern bool Sell         = true;     // отключение линии БУ селл
extern bool All          = true;     // отключение линии БУ всех

extern color BuyColor    = Blue;     // цвет линии БУ бай
extern color SellColor   = Red;      // цвет линии БУ селл
extern color AllColor    = Yellow;   // цвет линии БУ всех
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

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

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double AllProfit()
  {
   double pr=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)
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutLine(string name,double p,color clr)
  {
   ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_HLINE,0,0,p);
//--- установим цвет линии
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим толщину линии
   ObjectSetInteger(0,name,OBJPROP_WIDTH,Width);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Price(int type)
  {
   double pr=0,sum=0,lot=0;

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==0 && (type==0 || type==2))
              {
               sum+=OrderOpenPrice()*OrderLots();
               lot+=OrderLots();
              }

            if(OrderType()==1 && (type==1 || type==2))
              {
               sum-=OrderOpenPrice()*OrderLots();
               lot-=OrderLots();
              }
           }
        }
     }

   if(lot>0 || lot<0) pr=sum/lot;
   return(pr);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(OrdersTotal()<1 && IsTesting())
     {
      for(int i=1;i<=5;i++)
        {
         PutOrder(3,Ask+300*Point*i);//selllimit 5
        }

      for(int i=1;i<=4;i++)
        {
         PutOrder(4,Ask+200*Point*i);//buystop 4
        }
     }

   if(Buy) PutLine("BLine",Price(0),BuyColor);
   if(Sell) PutLine("SLine",Price(1),SellColor);
   if(All) PutLine("ALine",Price(2),AllColor);

   if(IsTesting()) Comment("\n Profit: ",AllProfit(),
      "\n BuyProfitPrice: ",Price(0),
      "\n SellProfitPrice: ",Price(1),
      "\n AllProfitPrice: ",Price(2));
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 28 апреля 2016, 10:25
+2
Сейчас набросал первый более менее работоспособный вариант со своими функциями, а то вчера вообще ничего не шло. По скрину видно что БУ рассчитывается правдоподобно.




//+------------------------------------------------------------------+
//|                                                           BU.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 int StopLoss      = 1000;     // лось
extern int TakeProfit    = 111;      // язь
extern double Profit     = 111;      // язь в рублях
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

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

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double AllProfit()
  {
   double pr=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)
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutLine(string name,double p,color clr)
  {
   ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_HLINE,0,0,p);
//--- установим цвет линии
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим толщину линии
   ObjectSetInteger(0,name,OBJPROP_WIDTH,3);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Price(int type)
  {
   double pr=0,sum=0,lot=0;

   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==0 && (type==0 || type==2))
              {
               sum+=OrderOpenPrice()*OrderLots();
               lot+=OrderLots();
              }

            if(OrderType()==1 && (type==1 || type==2))
              {
               sum-=OrderOpenPrice()*OrderLots();
               lot-=OrderLots();
              }
           }
        }
     }
     
   if(lot>0 || lot<0) pr=sum/lot;
   return(pr);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(OrdersTotal()<1)
     {
      for(int i=1;i<=5;i++)
        {
         PutOrder(3,Ask+300*Point*i);//selllimit 5
        }

      for(int i=1;i<=4;i++)
        {
         PutOrder(4,Ask+200*Point*i);//buystop 4
        }
     }
   PutLine("BLine",Price(0),Blue);
   PutLine("SLine",Price(1),Red);
   PutLine("ALine",Price(2),Yellow);

   Comment("\n Profit: ",AllProfit(),
           "\n BuyProfitPrice: ",Price(0),
           "\n SellProfitPrice: ",Price(1),
           "\n AllProfitPrice: ",Price(2));
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 28 апреля 2016, 08:11
0
Покажите на скрине как конкретно у вас не работает? Я сейчас посмотрел там разница всего в единичку была. Замените в коде эти функции:


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OpenPos()
  {
   double buy  = iCustom(NULL,0,IndName,WavePeriod,AvgPeriod,6,1);
   double sell = iCustom(NULL,0,IndName,WavePeriod,AvgPeriod,7,1);

   if(buy>-1000 && CountTrades(0)<MaxBuyTrades)
     {
      PutOrder(0,Ask);
     }
   if(sell>-1000 && CountTrades(1)<MaxSellTrades)
     {
      PutOrder(1,Bid);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void RevercePos()
  {
   double buy  = iCustom(NULL,0,IndName,WavePeriod,AvgPeriod,6,1);
   double sell = iCustom(NULL,0,IndName,WavePeriod,AvgPeriod,7,1);

   if(sell>-1000 && CountTrades(0)<MaxBuyTrades)
     {
      PutOrder(1,Bid);
     }
   if(buy>-1000  && CountTrades(1)<MaxSellTrades)
     {
      PutOrder(0,Ask);
     }
  }
avatar

AM2

  • 28 апреля 2016, 07:11
0
Сейчас проверю, а то я просто добавил не проверял.
avatar

AM2

  • 28 апреля 2016, 06:54
0
А вот и мой советник: zakaz.opentraders.ru/29341.html
Я помню долго тогда над ним пыхтел, и таки сяк и эдак его крутил в результате получилось по другому чем у фарго. А над этим вариантом еще дольше колдовать надо.
avatar

AM2

  • 27 апреля 2016, 21:30
0
У кого есть наработки подобные, быстро сделают, а с нуля долго. Fargo например в этом разобрался: mql.opentraders.ru/25225.html
avatar

AM2

  • 27 апреля 2016, 20:28
0
Нет не возьмусь. Я три часа просидел а толком так ничего не сообразил а старый не нашел.
avatar

AM2

  • 27 апреля 2016, 19:53
0
Я хочу сказать что основа какая то есть, а в начале все равно в виде советника придется делать чтобы в тестере гонять и смотреть что и как работает а то в онлайн отлаживать надолго затянется
avatar

AM2

  • 27 апреля 2016, 17:40
0
Обещал я в личке посмотреть когда в столе заказов тема будет, но видать миллионы уплывают! :D 
avatar

AM2

  • 27 апреля 2016, 17:02