Подробное объяснение iCustom - страница 4

 
honest_knave: Я никогда не знал, что это называется "верблюжий чехол". Спасибо!
Похоже, модератор удалил мое предыдущее сообщение, потому что в нем была ссылка на WikiPedia, так что просто сделайте поиск в WikiPedia (или Google), чтобы узнать историю и подробности о "Верблюжьем деле".
 
Fernando Carreiro:
Похоже, модератор удалил мое предыдущее сообщение, потому что в нем была ссылка на Википедию, поэтому просто сделайте поиск в Википедии (или Google), чтобы узнать историю и подробности о "Верблюжьем деле".
Ваше сообщение было удалено, так как оно было двойным. Та же ссылка уже опубликована.
 
Продолжая #23 и инкапсулируя в функцию #26, я теперь показываю структуру, которая работает как на MT4, так и на MT5. (Для пост-билда 600 я изменил недопустимые точки(#29) в именах переменных, и привел ints в соответствие со стандартными перечислениями).
Не компилируется, не тестируется.
struct SFX{                            // SFX indicator at #1
   #define  SFX_NAME_PATH   "SFX"       // Indicator filename without extension,
                                       // including blanks if any.
   enum SFXbuffer{SFX_STD, SFX_STDMA};
   string                  PairName;
   ENUM_TIMEFRAMES         tf;
   int                     StdDev_MA_Period;
   int                     StdDev_MA_Shift;
   ENUM_MA_METHOD          StdDev_MA_Method;
   ENUM_APPLIED_PRICE      StdDev_MA_Price;
   int                     MA_Fast_Period;
   ENUM_MA_METHOD          MA_Fast_Method;
   int                     MA_Fast_Shift;
   #define  CheckOncePerBar true;
   void SFX()      : PairName(_Symbol),            tf(PERIOD_CURRENT),
                     StdDev_MA_Period(12),         StdDev_MA_Shift(0),
                     StdDev_MA_Method(MODE_SMA),   StdDev_MA_Price(PRICE_CLOSE),
                     MA_Fast_Period(3),            MA_Fast_Method(MODE_SMMA),
#ifndef __MQL5__
                     MA_Fast_Shift(0){}
   double get(SFXbuffer buf, int iBar = 0){
      return iCustom(PairName, tf, SFX_NAME_PATH,
                     StdDev_MA_Period,             StdDev_MA_Shift,
                     StdDev_MA_Method,             StdDev_MA_Price,
                     MA_Fast_Period,               MA_Fast_Method,
                     MA_Fast_Shift,                CheckOncePerBar,
                     buf, iBar);
   }  // get
#else // MQL5
                     MA_Fast_Shift(0),             Handle(INVALID_HANDLE){}
   void ~SFX(){   if(Handle != INVALID_HANDLE) IndicatorRelease(Handle);   }
   double get(SFXbuffer buf, int iBar = 0){
      if(Handle == INVALID_HANDLE){
         Handle = iCustom(PairName, tf, SFX_NAME_PATH,
                     StdDev_MA_Period,             StdDev_MA_Shift,
                     StdDev_MA_Method,             StdDev_MA_Price,
                     MA_Fast_Period,               MA_Fast_Method,
                     MA_Fast_Shift,                CheckOncePerBar);
         if(Handle == INVALID_HANDLE){
            PrintFormat("%s: iCustom(%s) Failed: %i",
                        __FUNCTION__, SFX_NAME_PATH, _LastError);
            return 0;
         }
      }
      double  value[1]; CopyBuffer(Handle, buf, iBar, 1, value);
      return  value[0];
   }  // get
 Private:
   int                  Handle;     // MT5 only
#endif   // __MQL5__
}; // SFX
///////////////////////////////////////////////////////////////////////////////
SFX   SFXindicator;
// SFXindicator.StdDev_MA_Period = ...;   // modification of default parameters.
:
double     STDBuffer = SFXindicator.get(SFX_STD,   0);   // example calls
double     stddevma  = SFXindicator.get(SFX_STDMA, 0);
Не компилируется, не тестируется.
 

Здравствуйте, у меня есть быстрый (и безболезненный, я надеюсь) вопрос по iCustom: допустим, у меня есть 3 индикатора Ind_A, Ind_B и Ind_C, и есть советник EA.

Советник вызывает все 3 индикатора с помощью icustom, передавая им аргументы и получая результаты путем индексации их ответных буферов.

Я прикрепляю свои 3 индикатора на график EURUSD и запускаю советника; давайте сосредоточимся на индикаторе Ind_A, он работает как индикатор, но в то же время выполняется советником: экземпляр один и тот же или у нас два экземпляра ind_A запущены? (то есть, один экземпляр работает сам по себе, а другой живет внутри советника).

В таком случае у каждого экземпляра свой буфер? Или буфер общий для всех экземпляров индикатора?

Большое спасибо!

 

Извините, что снова разбудил эту тему. Но я подумал, что мой вопрос относится к этой теме.

Я пытаюсь получить доступ к 2 буферам из пользовательского индикатора trend-target, индикатор имеет один вход = 60, и два буфера Band UP и Band LO.

используя

double Value1 = iCustom(Symbol(),0,"TrendTarget.ex4",60,0,1,0);



double Value2 = iCustom(Symbol(),0,"TrendTarget.ex4",60,0,0,1);double Value1 = iCustom(Symbol(),0,"TrendTarget.ex4",60,0,1,0);



Comment("iCustom returned v1= "+Value1+ " and value2= ",Value2);

Правильно ли я задаю параметры для этого iCustom? Потому что я не могу получить значения Band Up и Band LO не точно для буферов в панели просмотра данных, пожалуйста, проверьте прикрепленную картинку. Только 2 или 3 первые десятичные цифры или 3e правильно, но для FX котировки все 4 цифры должны быть правильными, это так?

Надеюсь, что кодеры и опытные пользователи MQL5 помогут мне быстро исправить эту проблему? Заранее спасибо

-----------------------------------------------------------------------------------------------------
Кстати, что у вашего индикатора 5 входов и 4 буфера,

double Value1 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,1,0,0,0);

double Value2 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,2,0,0);

double Value3 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,0,3,0);

double Value4 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,0,0,4);


Как показано выше?

 
ntk2017: Извините, что снова разбудил эту тему. Но

Пожалуйста, отредактируйте свое (оригинальное) сообщение и используйте кнопку CODE (Alt-S)! (Для больших объемов кода, прикрепите его.)
Общие правила и лучшие практики форума. -Общий - форум по программированию на MQL5
Редактор сообщений

 
ntk2017: К слову, ваш индикатор имеет 5 входов и 4 буфера,
double Value1 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,1,0,0,0);
double Value2 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,2,0,0);
double Value3 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,0,3,0);
double Value4 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,0,0,4);

Как это выше?

Абсолютно нет.

iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,BufferIndex,BarIndex);
 
William Roeder:

Абсолютно нет.

Я должен использовать вот так
double value1 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,1,0,0,0,0); //with BarIndex=0, when only check on close or 1= when check on every tick;
 double value2 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,1,0,0,0);
double value3 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,0,1,0,0);
double value4 = iCustom(Symbol(),0,"indicator",a1,a2,a3,a4,a5,0,0,0,1,0);

Я только что нашел пример "Комбинированное использование программ"(https://book.mql4.com/samples/shared) в mql5 Я думаю, что этот пример в codig - то, что мне нужно. Я изучу эту часть, если у меня возникнут вопросы по программированию, я надеюсь, что вы поможете мне запустить его более стабильно и с большей прибылью.

Combined Use of Programs - Simple Programs in MQL4 - MQL4 Tutorial
Combined Use of Programs - Simple Programs in MQL4 - MQL4 Tutorial
  • book.mql4.com
It was said earlier that according to MQL4 rules trade functions cannot be used in custom indicators, that is why for automated trading Expert Advisors or scripts should be used. However, the resource-saving technology used for calculations in indicators (see Creation of Custom Indicators) is widely used when creating trading programs. In most...
 
William Roeder:

Абсолютно нет.

Я сделал код таким образом, теперь я вижу буферы 1, 2 TrendTarget (Но все еще не все 4 цифры верны!!!), я установил значение BarsIndex на каждой палке на 1, потому что я люблю перепроверять TrendTarget.

   double shortSma, longSma, ShortSL, ShortTP, LongSL, LongTP,Band_UP,Band_LO;

   double Value1,Value2 ;





   Value1 = iCustom(Symbol(),0,"TrendTarget.ex4",60,1,1);

   Value2 = iCustom(Symbol(),0,"TrendTarget.ex4",60,2,1);

   Band_UP = Value1;

   Band_LO = Value2;

   Comment(" !!!!!!! ICUSTOM returned Value1= "+Value1+ " and value2= ",Value2+"\n");

Но у меня все еще есть проблема. Я использую TrendTarget как фильтр
.
if(tik <= 5 && Ask>Band_UP) ///////////////ONLY can open SELL////////////////
        {
         ////////////////////// TP1 SL1 ///////////////////////////////////
         openOrder(Symbol(), OP_SELLSTOP,LotSize,sellPrice,sellPrice+SL1*point(), sellPrice-TP1*point(),"_Sell_1",MagicNumber,exp,Crimson);
        }

      if(tik <= 5 && Bid<Band_LO)   ///////////////ONLY can open BUY////////////////

        {
         ////////////////////// TP1 SL1 ///////////////////////////////
         openOrder(Symbol(), OP_BUYSTOP,LotSize,buyPrice,buyPrice-SL1*point(), buyPrice+TP1*point(),"_Buy_1",MagicNumber,exp,Navy);
        }
но после его запуска, я прикрепляю индикатор TrendTarget и вижу, что советник все еще открывает много сделок между каналами!!!!!.

На картинке я добавляю TrendTarget после запуска. Когда я создаю шаблон тестера с включенным TrendTarget(параметр TF=60), канал отображается только на первых X барах, затем я вижу только кривую цены, почему так?
Как я могу просто добавить индикатор Trend Target для визуальной проверки, где открываются ордера?

Я хотел бы использовать в коде значение_UP в прошлом, аналогично использованию close: before yesterday Close[2], yesterday Close[1], current close Close[0]? Возможно ли это?
Файлы:
 
Проблемы, которые у меня все еще есть с тестовым советником scap, следующие:

1-я проблема:
Я могу видеть буферы 1, 2 TrendTarget (Но все еще не все 4 цифры верны!!!), важно ли это? Для котировки EURUSD 1.0907 я думал, когда значение цены должно сравниваться с верхним или нижним каналом TrendTarget, эти значения TrendTarget должны быть точно верными, по крайней мере, 4 десятичные цифры.
Я установил значение BarsIndex на каждой палке равным 1, потому что мне нравится перепроверять TrendTarget

2-я проблема:
Но у меня все еще есть проблема. Я использую TrendTarget как фильтр.

но после его запуска, я прикрепляю индикатор TrendTarget и затем я вижу, что советник все еще открывает много сделок между каналами!!!!!.

3-я проблема:
На прикрепленном рисунке я должен добавить TrendTarget после запуска. Когда я создаю шаблон тестера с включенным TrendTarget (параметр TF=60), канал TrendTarget отображается только для первых X баров, может быть 100, затем я могу видеть только кривую цены, почему так?

4-я проблема:
Как я могу просто добавить индикатор Trend Target для визуальной проверки во время исполнения, где открываются ордера?

5-я проблема:
Я хотел бы использовать в коде значение_UP в прошлом, аналогично использованию close: before yesterday Close[2], yesterday Close[1], current close Close[0]? Возможно ли это? Потому что может быть более длинный, чем несколько баров прорыв, в этом случае я хотел бы изменить стратегию на прорыв торговли, вместо этого, только теория я все еще не могу знать, как сделать это в кодировании

6-я проблема:
Когда условие коснулось, например, я хотел бы открыть только 1 ордер, здесь, потому что цена остается много баров выше верхнего канала, так что условие верно всегда, он открыт, пока мой счет не закончится! Как сделать отправку только одного ордера, а затем ждать изменения условия?

7-я проблема:
Кто-нибудь знает, что такое trendtarget, мне кажется, это линия тренда или MA(x) цены с +/- 1xATR(14), добавленной с каждой стороны, это правильно. Есть ли у кого-нибудь код для этого?
Причина обращения: