0
На рисунке — не ренко-график (H1). После запуска на ренко эксперт открывает позицию, не дожидаясь касания ценой на текущем или последующих барах границы канала…


Пропишите более четко входы и выходы, вот образец: forexsystems.biz/index.php/obrazets-tz
Делайте все со скринами. Сейчас входы выходы такие: цена выше ниже канала плюс разворотный бар.
avatar

AM2

  • 24 августа 2016, 06:06
0
Сейчас есть ТМА и входы выше ниже канала. Смотрите и пишите что еще добавить:




//+------------------------------------------------------------------+
//|                                                 RenkoChannel.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      = 500;      // лось
extern int TakeProfit    = 500;      // язь
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик
extern string IndName    = "TMA-KC";

datetime t=0;
//+------------------------------------------------------------------+
//| 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;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()<2) count++;
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   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()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double up=iCustom(NULL,0,IndName,0,1);
   double dn=iCustom(NULL,0,IndName,2,1);

   if(t!=Time[0])
     {
      if(Close[1]>Open[1] && Close[2]<Open[2] && Ask<dn)
        {
         CloseAll(1);
         if(CountTrades()<1) PutOrder(0,Ask);
        }

      if(Close[1]<Open[1] && Close[2]>Open[2] && Bid>up)
        {
         CloseAll(0);
         if(CountTrades()<1) PutOrder(1,Bid);
        }
     }

   Comment("\n up: ",up,"\n dn: ",dn);
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 23 августа 2016, 18:36
0
Тогда только по ТЗ.
avatar

AM2

  • 23 августа 2016, 17:17
0
Сегодня буду доделывать с ТМА.
avatar

AM2

  • 23 августа 2016, 12:13
0
Вот набросок эксперта без индикатора канала. Предлагаю поставить стандартный энвелопес. Будет лучше оптимизироваться, и кодить мне проще.




//+------------------------------------------------------------------+
//|                                                 RenkoChannel.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      = 500;      // лось
extern int TakeProfit    = 500;      // язь
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

datetime t=0;
//+------------------------------------------------------------------+
//| 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;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderType()<2) count++;
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll(int ot=-1)
  {
   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()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(t!=Time[0])
     {
      if(Close[1]>Open[1] && Close[2]<Open[2])
        {
         CloseAll(1);
         PutOrder(0,Ask);
        }

      if(Close[1]<Open[1] && Close[2]>Open[2])
        {
         CloseAll(0);
         PutOrder(1,Bid);
        }
     }
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 23 августа 2016, 10:54
0
Декомпил, чужой код. Нет с этим не ко мне. ТЗ на индикатор еще могу рассмотреть. И у вас тем более есть один заказ в этом месяце.
avatar

AM2

  • 23 августа 2016, 10:21
0
Раньше мне казалось, что нейросети, это что-то заумное — типо логически мыслящего робота, способного самообучаться   Неужели это всего лишь математическая формула?


Здесь только самый простейший вариант.
avatar

AM2

  • 23 августа 2016, 10:08
0
Доработка мне будет оплачиваться только в следующем месяце и то если разберусь с чужим кодом. Также уточните формулу для расчета.
avatar

AM2

  • 22 августа 2016, 21:43
0
Если торгует в прибыль, закажите за десятку на мкл.
avatar

AM2

  • 22 августа 2016, 21:23
0
У вас там индикатор не прикрепился, поправьте у себя в черновиках.
avatar

AM2

  • 22 августа 2016, 21:19
0
Индикатор не прикрепился.
avatar

AM2

  • 22 августа 2016, 21:13
0
Бесплатный советник только трейдерам от 3-го уровня.
avatar

AM2

  • 22 августа 2016, 17:44
0
Остальное добавлю, когда будет 3-й уровень, чтобы труд был оплачен.
avatar

AM2

  • 22 августа 2016, 13:01
+1
Реализация в 2 строчки, а сколько всего перелопатил *think* 




//+------------------------------------------------------------------+
//|                                                     MultInfo.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

string s1="";
string s2="";
string symb[5];
double MinAtr[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   double atr=0;
/*
1. Заносим в массив атр 5 символов
2. Сортируем по возрастанию
3. Смотрим 6-й, если он меньше последнего
4. Заменяем последний 
5. Сортируем по возрастанию
6. Перебор до i<SymbolsTotal(true)

*/

/*  
   for(int i=0;i<5;i++)
     {
      //заносим 5 атр в массив
      MinAtr[i]=NormalizeDouble(iATR(SymbolName(i,true),0,14,0),Digits);
      //сортируем
      ArraySort(MinAtr,WHOLE_ARRAY,0,MODE_ASCEND);
     }
 
   for(int i=4;i<SymbolsTotal(true);i++)
     {
      atr=NormalizeDouble(iATR(SymbolName(i,true),0,14,0),Digits);
      if(atr<MinAtr[i]) MinAtr[3]=atr;
      ArraySort(MinAtr,WHOLE_ARRAY,0,MODE_ASCEND);
     }
    
   for(int i=0;i<SymbolsTotal(true);i++)
     {
      //поиск 1-го минимального атр
      s1=SymbolName(i,true);
      atr=iATR(s1,0,14,0);
      MinAtr1=atr;
      if(atr<MinAtr1) MinAtr1=atr;
     }
*/
   int k=SymbolsTotal(true);

   for(int i=0;i<k;i++)
     {
      ArrayResize(MinAtr,k);
      MinAtr[i]=NormalizeDouble(iATR(SymbolName(i,true),0,14,0),Digits);
     }
     
   //сортируем
   ArraySort(MinAtr,WHOLE_ARRAY,0,MODE_ASCEND);

   Comment("\n ATR "+SymbolName(0,true)+": ",NormalizeDouble(iATR(SymbolName(0,true),0,14,0),Digits),
           "\n ATR "+SymbolName(1,true)+": ",NormalizeDouble(iATR(SymbolName(1,true),0,14,0),Digits),
           "\n ATR "+SymbolName(2,true)+": ",NormalizeDouble(iATR(SymbolName(2,true),0,14,0),Digits),
           "\n ATR "+SymbolName(3,true)+": ",NormalizeDouble(iATR(SymbolName(3,true),0,14,0),Digits),
           "\n ATR "+SymbolName(4,true)+": ",NormalizeDouble(iATR(SymbolName(4,true),0,14,0),Digits),
           "\n ATR "+SymbolName(5,true)+": ",NormalizeDouble(iATR(SymbolName(5,true),0,14,0),Digits),
           "\n ATR "+SymbolName(6,true)+": ",NormalizeDouble(iATR(SymbolName(6,true),0,14,0),Digits),
           "\n ************************",
           "\n Min ATR: ",string(MinAtr[0])+" ",string(MinAtr[1])+" ",string(MinAtr[2])+" ",string(MinAtr[3])+" ",string(MinAtr[4])+" ");

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

avatar

AM2

  • 22 августа 2016, 09:54
0
Завтра посмотрю. Если получится быстро сделать, будет индикатор.
avatar

AM2

  • 21 августа 2016, 18:47
0
Посмотрите вариант, который я сегодня набросал: www.opentraders.ru/downloads/1213/
avatar

AM2

  • 30 июля 2016, 14:24
0
Без логов и скринов нарушается обратная связь. Как я могу понять что у вас не работает если вы не предоставляете никакой информации. В топике выше я подробно объяснил как делать скрины и какие именно нужны. Темный лес нажать 2 клавиши?
avatar

AM2

  • 30 июля 2016, 09:26
0
Я сейчас смотрю советник, но меня интересует почему вы так упорно отказываетесь предоставить доказательства некорректной работы функций в моем варианте и настаиваете чтобы я правил чужой код. Вы ведь прекрасно понимаете что это занимает времени и сил в разы больше чем написать с нуля или поправить свой код.
avatar

AM2

  • 30 июля 2016, 08:59