0
Я что то очень сомневаюсь чтобы эти отрезки кода были сгенерированы :) 


      Comment("\n                                        " + G_comment_172 + "  MagicNumber: " + G_magic_136 
         + "\n                                        Day:" + DayOfWeek() + " CL Time: " + TimeToStr(str2time_156, TIME_DATE|TIME_SECONDS) 
         + "\n                                        ---------------------------------------------------------------" 
         + "\n                                        Current Server Time   : " + TimeToStr(TimeCurrent(), TIME_DATE|TIME_SECONDS) 
         + "\n                                        Account Balance         : " + DoubleToStr(NormalizeDouble(AccountBalance(), 2), 2) 
         + "\n                                        Account Equity           : " + DoubleToStr(NormalizeDouble(AccountEquity(), 2), 2) 
         + "\n                                        ---------------------------------------------------------------" 
         + "\n                                        Buy Profit/Loss           : " + DoubleToStr(f0_14(G_magic_136), 2) 
         + "\n                                        Sell Profit/Loss            : " + DoubleToStr(f0_12(G_magic_136), 2) 
         + "\n                                        ---------------------------------------------------------------" 
         + "\n                                        Open Buy orders        : " + Li_0 
         + "\n                                        Open Sell orders         : " + Li_4 
         + "\n                                        Startup TakeProfit       : " + TakeProfit 
         + "\n                                        Sell Grid size              : " + DoubleToStr(Li_20 - spread_72, 0) + " pips" 
         + "\n                                        Buy Grid size             : " + DoubleToStr(Li_16 - spread_72, 0) + " pips" 
      + "\n                                        ---------------------------------------------------------------");



int f0_2(int Ai_0) {
   int Li_4 = 0;
   int Li_ret_8 = 0;
   if (Symbol() == "AUDCAD" || Symbol() == "AUDCADm") Li_4 = 1000;
   else {
      if (Symbol() == "AUDJPY" || Symbol() == "AUDJPYm") Li_4 = 2000;
      else {
         if (Symbol() == "AUDNZD" || Symbol() == "AUDNZDm") Li_4 = 3000;
         else {
            if (Symbol() == "AUDUSD" || Symbol() == "AUDUSDm") Li_4 = 4000;
            else {
               if (Symbol() == "CHFJPY" || Symbol() == "CHFJPYm") Li_4 = 5000;
               else {
                  if (Symbol() == "EURAUD" || Symbol() == "EURAUDm") Li_4 = 6000;
                  else {
                     if (Symbol() == "EURCAD" || Symbol() == "EURCADm") Li_4 = 7000;
                     else {
                        if (Symbol() == "EURCHF" || Symbol() == "EURCHFm") Li_4 = 8000;
                        else {
                           if (Symbol() == "EURGBP" || Symbol() == "EURGBPm") Li_4 = 9000;
                           else {
                              if (Symbol() == "EURJPY" || Symbol() == "EURJPYm") Li_4 = 2100;
                              else {
                                 if (Symbol() == "EURUSD" || Symbol() == "EURUSDm") Li_4 = 1100;
                                 else {
                                    if (Symbol() == "GBPCHF" || Symbol() == "GBPCHFm") Li_4 = 1200;
                                    else {
                                       if (Symbol() == "GBPJPY" || Symbol() == "GBPJPYm") Li_4 = 1300;
                                       else {
                                          if (Symbol() == "GBPUSD" || Symbol() == "GBPUSDm") Li_4 = 1400;
                                          else {
                                             if (Symbol() == "NZDJPY" || Symbol() == "NZDJPYm") Li_4 = 1500;
                                             else {
                                                if (Symbol() == "NZDUSD" || Symbol() == "NZDUSDm") Li_4 = 1600;
                                                else {
                                                   if (Symbol() == "USDCAD" || Symbol() == "USDCADm") Li_4 = 1700;
                                                   else {
                                                      if (Symbol() == "USDCHF" || Symbol() == "USDCHFm") Li_4 = 1800;
                                                      else {
                                                         if (Symbol() == "USDJPY" || Symbol() == "USDJPYm") Li_4 = 1900;
                                                         else Li_4 = 1111;
                                                      }
                                                   }
                                                }
                                             }
                                          }
                                       }
                                    }
                                 }
                              }
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }
   Li_ret_8 = Ai_0 + Li_4;
   return (Li_ret_8);
}
avatar

AM2

  • 10 июня 2017, 11:27
0
Еще сделал набросок индикатора с левыми метками, но здесь тоже нужна отладка:




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

input int MAPeriod=50;
input int ADXPeriod=14;
input int RSIPeriod=14;
input int RSILevel=30;
input int ADXLevel=45;
input int Count=5;
input int Length=100;
input ENUM_TIMEFRAMES tf=PERIOD_H4;

int k=0;
datetime t=0;
int length=Length;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void RightPrice(string name,datetime time,double price)
  {
   ObjectCreate(0,name,OBJ_ARROW_LEFT_PRICE,0,time,price);
//--- установим цвет метки
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим стиль окаймляющей линии
   ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID);
//--- установим размер метки
   ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutTrendLine(string name,datetime time1,double price1,datetime time2,double price2,color clr)
  {
//ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_TREND,0,time1,price1,time2,price2);
//--- установим цвет линии 
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии 
   ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_DOT);
//--- установим толщину линии 
   ObjectSetInteger(0,name,OBJPROP_WIDTH,2);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо 
   ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
  }
//+------------------------------------------------------------------+
//| 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(t!=Time[0])
     {
      for(int i=0;i<Bars;i++)
        {
         if(iADX(NULL,tf,ADXPeriod,0,0,i)>ADXLevel && iRSI(NULL,tf,RSIPeriod,0,i)>100-RSILevel && iRSI(NULL,tf,RSIPeriod,0,i+1)<100-RSILevel && iAO(NULL,tf,i)>0)
           {
            int step=i-length;
            if(i<Length) {length=i;}
            PutTrendLine("Line "+(string)Time[i],Time[i],Close[i],Time[i-length],Close[i],Red);
            Alert(_Symbol+": "+"Нарисовался верхний уровень!");
            RightPrice("Arrow "+(string)Time[i],Time[i],Close[i]);
            k++;
           }
         if(iADX(NULL,tf,ADXPeriod,0,0,i)>ADXLevel && iRSI(NULL,tf,RSIPeriod,0,i)<RSILevel && iRSI(NULL,tf,RSIPeriod,0,i+1)>RSILevel && iAO(NULL,tf,i)<0)
           {
            PutTrendLine("Line "+(string)Time[i],Time[i],Close[i],Time[i-length],Close[i],Red);
            Alert(_Symbol+": "+"Нарисовался нижний уровень!");
            RightPrice("Arrow "+(string)Time[i],Time[i],Close[i]);
            k++;
           }
         if(k>=Count) break;
         t=Time[0];
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 10 июня 2017, 11:10
0
Вообще речь шла про Н4, Н1

ТФ можно ставить любой.

Если это не ручная разметка, то чертит в обратную сторону и ценовые метки нужны левые а не правые


Сделал в обратную сторону, т.к. идет выход за размер массива.

rsi не из архива

РСИ стандартный
avatar

AM2

  • 10 июня 2017, 00:11
0
Добавил алерт, ТФ, число уровней, ценовые метки, однократный сигнал:




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

input int MAPeriod=50;
input int ADXPeriod=14;
input int RSIPeriod=14;
input int RSILevel=30;
input int ADXLevel=45;
input int Count=5;
input int Length=100;
input ENUM_TIMEFRAMES tf=PERIOD_H4;

int k=0;
datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

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

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void RightPrice(string name,datetime time,double price)
  {
   ObjectCreate(0,name,OBJ_ARROW_RIGHT_PRICE,0,time,price);
//--- установим цвет метки
   ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
//--- установим стиль окаймляющей линии
   ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID);
//--- установим размер метки
   ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutTrendLine(string name,datetime time1,double price1,datetime time2,double price2,color clr)
  {
//ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_TREND,0,time1,price1,time2,price2);
//--- установим цвет линии 
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии 
   ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_DOT);
//--- установим толщину линии 
   ObjectSetInteger(0,name,OBJPROP_WIDTH,2);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо 
   ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(t!=Time[0])
     {
      for(int i=0;i<Bars;i++)
        {
         if(iADX(NULL,tf,ADXPeriod,0,0,i)>ADXLevel && iRSI(NULL,tf,RSIPeriod,0,i)>100-RSILevel && iRSI(NULL,tf,RSIPeriod,0,i+1)<100-RSILevel && iAO(NULL,tf,i)>0)
           {
            PutTrendLine("Line "+(string)Time[i],Time[i],Close[i],Time[i+Length],Close[i],Red);
            Alert(_Symbol+": "+"Нарисовался верхний уровень!");
            RightPrice("Arrow "+(string)Time[i],Time[i],Close[i]);
            k++;
           }
         if(iADX(NULL,tf,ADXPeriod,0,0,i)>ADXLevel && iRSI(NULL,tf,RSIPeriod,0,i)<RSILevel && iRSI(NULL,tf,RSIPeriod,0,i+1)>RSILevel && iAO(NULL,tf,i)<0)
           {
            PutTrendLine("Line "+(string)Time[i],Time[i],Close[i],Time[i+Length],Close[i],Red);
            Alert(_Symbol+": "+"Нарисовался нижний уровень!");
            RightPrice("Arrow "+(string)Time[i],Time[i],Close[i]);
            k++;
           }
         if(k>=Count) break;
         t=Time[0];
        }
     }
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 9 июня 2017, 22:34
0
Вот такой получился вариант:




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

input int MAPeriod=50;
input int ADXPeriod=14;
input int RSIPeriod=14;
input int RSILevel=30;
input int ADXLevel=45;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

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

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutTrendLine(string name,datetime time1,double price1,datetime time2,double price2,color clr)
  {
   //ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_TREND,0,time1,price1,time2,price2);
//--- установим цвет линии 
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии 
   ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_DOT);
//--- установим толщину линии 
   ObjectSetInteger(0,name,OBJPROP_WIDTH,2);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо 
   ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   for(int i=0;i<Bars;i++)
     {
      if(iADX(NULL,0,ADXPeriod,0,0,i)>ADXLevel && iRSI(NULL,0,RSIPeriod,0,i)>100-RSILevel && iRSI(NULL,0,RSIPeriod,0,i+1)<100-RSILevel && iAO(NULL,0,i)>0) PutTrendLine((string)Time[i],Time[i],Close[i],Time[i+100],Close[i],Red);
      if(iADX(NULL,0,ADXPeriod,0,0,i)>ADXLevel && iRSI(NULL,0,RSIPeriod,0,i)<RSILevel && iRSI(NULL,0,RSIPeriod,0,i+1)>RSILevel && iAO(NULL,0,i)<0) PutTrendLine((string)i,Time[i],Close[i],Time[i+100],Close[i],Red);
     }
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 9 июня 2017, 19:29
+1
Править скрипт это уже другой заказ.
avatar

AM2

  • 9 июня 2017, 17:57
0
Сигнальный уровень и алерт при появлении, это я еще могу сделать. А полностью ТЗ к платному.
avatar

AM2

  • 8 июня 2017, 22:26
0
Тейк есть в советнике. Кидай настройки и логи, посмотрю.
avatar

AM2

  • 8 июня 2017, 22:20
0
В советнике есть стопы.
avatar

AM2

  • 8 июня 2017, 21:45
0
Только если будет свободное время.
avatar

AM2

  • 8 июня 2017, 21:26
0
С окошком можно сделать, но это не ко мне.
avatar

AM2

  • 8 июня 2017, 21:16
0
На демо работает, в тестере не гоняется: www.opentraders.ru/downloads/1601/

avatar

AM2

  • 8 июня 2017, 19:02
0
Добавил лот из кода: www.opentraders.ru/downloads/1600/

Чтобы советник не открывал позу сразу, отключайте автоторговлю. А советник открывается в направлении луча, как прописано в ТЗ.
avatar

AM2

  • 8 июня 2017, 18:24
0
он открывает ордера без спроса.
Попробую еще раз. При появление линии зиг-зага на экран выходит сообщение — алерт «на таком то графике появилась линия.» Советник предлагает войти в позицию зависимо от направления линии с настройками


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

AM2

  • 8 июня 2017, 17:32
0
Один заказ в месяц.
avatar

AM2

  • 8 июня 2017, 17:27
0
В архиве штук 5 скринов. Вы WinRar не пользуетесь?

Желательно чтобы все было в топике, чтобы было перед глазами. О том что необходимо скидывать все сюда я вам уже писал.
avatar

AM2

  • 7 июня 2017, 22:10
0
Пока реализовано по такой примитивной формуле: www.opentraders.ru/downloads/1600/


//+------------------------------------------------------------------+
//| Лот на стоп от депо                                              |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;
   if(Lots==0)
     {
      lot=NormalizeDouble(AccountBalance()*Risk/(AccountBalance()*StopLoss),2); // 10000*1000/10000*1000=1
     }
   return(lot);
  }
avatar

AM2

  • 7 июня 2017, 22:08