Помощь в кодировании - страница 743

 
mladen:
Сингулярный спектральный анализ (SSA) пересчитывается, если только это не версия с конечной точкой. Поскольку этот индикатор использует "обычный" SSA, он тоже пересчитывается
БОЛЬШОЕ СПАСИБО
 
mladen:

Боюсь, что из кода я не могу понять, каково ваше намерение.

Если вы пытаетесь иметь средние с уровнями, используйте тот, который я разместил в качестве шаблона

Здравствуйте,

Да, я буду использовать вашу продвинутую МА с уровнями, (у нее больше цен, и т.д... цветная МА, и т.д...)

но я попытался создать его самостоятельно, чтобы понять, как создавать пользовательские индикаторы,

моя идея состоит в том, чтобы создать такой же компонент (по сути, MA с 2 уровнями...).

Я использую центральную MA, и еще 2 MA, построенные с помощью точечных линий, чтобы получить тот же эффект, что и уровни...
для каждого уровня я заполняю буфер, используя событие вычисления... как вы мне сказали, но что-то не так ;-(
2 МА, которые имитируют уровень, будут смещены по вертикали... но это не работает

 
baraozemo:

Здравствуйте,

да, я буду использовать ваш продвинутый ma с уровнями, (у него больше цен, и т.д... цветной ma, и т.д...)

но я попытался создать его самостоятельно, чтобы понять, как создавать пользовательские индикаторы,

Моя идея состоит в том, чтобы создать такой же компонент (по сути, MA с 2 уровнями...).

Я использую центральную MA, и еще 2 MA, построенные с помощью точечных линий, чтобы получить тот же эффект, что и уровни...
для каждого уровня я заполняю буфер, используя событие вычисления... как вы мне сказали, но что-то не так ;-(
2 МА, которые имитируют уровень, будут смещены по вертикали... но это не работает

Да, именно это я и имел в виду.

Все очень просто:

  • создать МА (средний уровень)
  • добавить некоторую разницу вверх и вниз для уровня 1 (делая еще два буфера)
  • добавьте некоторую разницу вверх и вниз для уровня 2 (сделав еще два буфера)

Не нужно ничего менять в вычислении средних или чего-либо еще: простое добавление или вычитание из центрального буфера (ma).

 

double pipLevel1 = -10;
double pipLevel2 = 10;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtLineBuffer,INDICATOR_DATA); //MA Buffer
   SetIndexBuffer(1,ExtLv1Buffer,INDICATOR_DATA); //MA lv1 Buffer
   SetIndexBuffer(2,ExtLv2Buffer,INDICATOR_DATA); //MA lv2 Buffer
//--- set accuracy
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1);
//--- sets first bar from what index will be drawn

   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID); //MA Style
   PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_DOT);   //MA lvl1 Style
   PlotIndexSetInteger(2,PLOT_LINE_STYLE,STYLE_DOT);   //MA lvl2 Style

                                                       //IndicatorSetInteger(INDICATOR_LEVELS,1,InpLevel1); //MA lvl1 Value
//IndicatorSetInteger(INDICATOR_COLOR2,1,Cyan);
//IndicatorSetInteger(INDICATOR_STYLE2,1,STYLE_DOT);
//IndicatorSetInteger(INDICATOR_IDTH,1,1);

//IndicatorSetInteger(INDICATOR_LEVELS,2,InpLevel2); //MA lvl2 Value
//IndicatorSetInteger(INDICATOR_LEVELCOLOR,2,Cyan);
//IndicatorSetInteger(INDICATOR_LEVELSTYLE,2,STYLE_DOT);
//IndicatorSetInteger(INDICATOR_LEVELWIDTH,2,1);  

   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpMAPeriod); //MA
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,InpMAPeriod); //MA lvl1
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,InpMAPeriod); //MA lvl2
//---- line shifts when drawing

   PlotIndexSetInteger(0,PLOT_SHIFT,InpMAShift); //MA
   PlotIndexSetInteger(1,PLOT_SHIFT,InpMAShift); //MA lvl1
   PlotIndexSetInteger(2,PLOT_SHIFT,InpMAShift); //MA lvl2

//--- name for DataWindow
   string short_name="unknown ma";
   switch(InpMAMethod)
     {
      case MODE_EMA :  short_name="EMA";  break;
      case MODE_LWMA : short_name="LWMA"; break;
      case MODE_SMA :  short_name="SMA";  break;
      case MODE_SMMA : short_name="SMMA"; break;
     }
   IndicatorSetString(INDICATOR_SHORTNAME,short_name+"("+string(InpMAPeriod)+")");
//---- sets drawing line empty value--
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);  //MA
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.0);  //MA lvl1
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0.0);  //MA lvl2
//---- initialization done
  }
//+------------------------------------------------------------------+
//|  Moving Average                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   double pipMultiplier=_Point*MathPow(10,MathMod(_Digits,2));
   pipLevel1 = InpLevel1 * pipMultiplier;
   pipLevel2 = InpLevel2 * pipMultiplier;
//Print("point:"+_Point+" Digits:"+_Digits+ "pipMul:"+pipMultiplier);
//pipLevel1 = InpLevel1 / 10;
//pipLevel2 = InpLevel2 / 10;  

//--- check for bars count
   if(rates_total<InpMAPeriod-1+begin)
      return(0);// not enough bars for calculation
//--- first calculation or number of bars was changed
   if(prev_calculated==0)
     {
      ArrayInitialize(ExtLineBuffer,0);  //MA
      ArrayInitialize(ExtLv1Buffer,1);  //MA level1
      ArrayInitialize(ExtLv2Buffer,2);  //MA level2
     }
//--- sets first bar from what index will be draw
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,InpMAPeriod-1+begin); //MA
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,InpMAPeriod-1+begin); //MA lvl1
   PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,InpMAPeriod-1+begin); //MA lvl2

//--- calculation
   switch(InpMAMethod)
     {
      case MODE_EMA:  
                      CalculateEMA(rates_total,prev_calculated,begin,price);
                      ExtLv1Buffer[rates_total-1]=price[rates_total-1]+pipLevel1;
                      ExtLv2Buffer[rates_total-1]=price[rates_total-1]+pipLevel2;
                      //Print ("rates_total:"+rates_total+" prev:"+prev_calculated+" begin:"+begin+" price:"+price[rates_total-1]);
                      break;
      case MODE_LWMA:
                      CalculateLWMA(rates_total,prev_calculated,begin,price);
                      ExtLv1Buffer[rates_total-1]=price[rates_total-1]+pipLevel1;
                      ExtLv2Buffer[rates_total-1]=price[rates_total-1]+pipLevel2;
                      break;
      case MODE_SMMA:
                      CalculateSmoothedMA(rates_total,prev_calculated,begin,price);
                      ExtLv1Buffer[rates_total-1]=price[rates_total-1]+pipLevel1;
                      ExtLv2Buffer[rates_total-1]=price[rates_total-1]+pipLevel2;
                      break;
      case MODE_SMA:  
                      CalculateSimpleMA(rates_total,prev_calculated,begin,price);
                      ExtLv1Buffer[rates_total-1]=price[rates_total-1]+pipLevel1;
                      ExtLv2Buffer[rates_total-1]=price[rates_total-1]+pipLevel2;
                      break;
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
mladen
:

Да, именно это я и имел в виду.

Все очень просто:

  • создать ma (среднее значение)
  • добавить некоторую разницу вверх и вниз для уровня 1 (делая еще два буфера)
  • добавить некоторую разницу вверх и вниз для уровня 2 (делая еще два буфера)

Не нужно ничего менять в вычислении средних или чего-либо еще: простое сложение или вычитание из центрального буфера (ma).

Не могли бы вы показать пример кода для сложения/вычитания (по вертикали) ma? Я пытался, но мой код не работает...

 
baraozemo:

не могли бы вы показать пример кода для сложения/вычитания (по вертикали) ма? Я пытался, но мой код не работает...

Это есть в той версии, которую я выложил. Пожалуйста, проверьте код еще раз.
 
mladen:
Этот индикатор использует центрированный TMA - он пересчитывает. Алерты были бы бессмысленны

что происходит со стрелкой при изменении цвета

 
dotmund:

Хорошо, что со стрелкой, когда цвет меняется

Сигналы (стрелки) были бы бессмысленны из-за их пересчета/перерисовывания
 
mladen:
Сигналы (стрелки) были бы бессмысленны из-за своей природы пересчета/перерисовки.

Уважаемый @mladen,

Может ли эксперт, не имеющий поддержки Ecn, использоваться с брокером типа Ecn без проблем?

В некоторых экспертах есть опции для брокеров типа Ecn.

Это навело меня на мысль, что было бы лучше оптимизировать или добавить некоторые коды для брокеров типа Ecn.

 
oguz:

Уважаемый @mladen,

Может ли эксперт, не имеющий поддержки Ecn, использоваться с брокером типа Ecn без проблем?

В некоторых экспертах есть опции для брокеров типа Ecn.

Это навело меня на мысль, что было бы лучше оптимизировать или добавить некоторые коды для брокеров типа Ecn.

Да, если вы не используете стоп-лосс и тейк-профит при открытии ордеров.

Если это сделано для ecn/stp с другой стороны, это будет работать на любом брокере без проблем. Единственное различие заключается в моменте открытия ордеров - никаких других изменений (или оптимизации) не требуется вообще

 
oguz:

Спасибо за подробный ответ.

Насколько я знаю, прикрепленная еа не имеет поддержки брокеров типа Ecn.

Я хочу использовать эту программу у брокера типа Ecn, используя SL и TP.

Я буду очень рад, если вы предоставите поддержку брокера типа Ecn.

Эту программу нужно переписать, чтобы все ее понимали.

Но поскольку я не говорю на языке, используемом в ней, я не могу помочь. Извините

Причина обращения: