Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 553

 
splxgf:
Это не баг, это фича. Вам сюда https://www.mql5.com/ru/articles/1388

ЙОООО спасибо! Блин. Вопрос решился одним кликом.
 
AlexeyVik:

В математике 0 это 0, а в твоём случае 0 это какая-то цена от которой всё началось.

Если цена открытия 1.3926 как предложил splxgf, то 0 будет в точке 1.3926/123*100=1.1322 или 1.3926/1.23=1.1322

1% от этого хода цены будет (1.3926-1.1322)/100=0.0026

Дальше, надеюсь, разберёшься сам.


Уважаемые - чушь полная. Фибо строится по 2 точкам, читайте что я чуть раньше написал. От одной точки 1.3926 нельзя ничего рассчитывать. Вы посмотрите хоть когда евра была на 1.13 :)

Опорной ценой является 0 уровень построения Фибо (минимум/максимум 4H, дня, недели, месяца, года...) и это совершенно конкретная цена а не математический 0. Ноль и 100% Фибо это минимум и макс цены за период. Тогда и 23% как точка входа от 0 уровня понятна и ТП на 38% и т.д.

 
splxgf:


Ну тогда это уже другой разговор и вполне решается на уровне элементарной математики с процентами.

PercentStep=(OrderTakeProfit-OrderOpenPrice)/(138-23) - Это будет 1% в попугаях-пунктах. Правда иногда операнды придется менять местами в зависимости от типа ордера или брать по модулю.

Далее

StoplossLevel = OrderOpenPrice + PercentStep*(51-23) //LevelWLoss в кимовских терминах, но это нужно вычислять для каждого ордера

MoveStoplossLevel = OrderOpenPrice + PercentStep*(76-23) //LevelProfit - см выше.


Большое Спасибо за ответ и формулу. Буду пробовать.
 

Не получается получить значение четвертого буффера. Что делаю не правильно?

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Lime
#property indicator_color2 Yellow
#property indicator_color3 Red
#property indicator_color4 Aqua
//--- input parameters
extern int       Period_MA_1=14;
extern int       p2          =7;
//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,ExtMapBuffer3);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,ExtMapBuffer4);
   IndicatorDigits(Digits+1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted(),                      
    limit;
    double MA_1_t,MA_2_t;
    if(counted_bars>0)
    counted_bars--;
    limit=Bars-counted_bars;
    
   for(int i=0;i<limit;i++)
   {
   ExtMapBuffer1[i]=Close[i]-Close[i+Period_MA_1];
   ExtMapBuffer2[i]=MathAbs(ExtMapBuffer1[i]);
   ExtMapBuffer3[i]=ExtMapBuffer1[i]/ExtMapBuffer2[i];
   ExtMapBuffer4[i]=iMAOnArray(ExtMapBuffer3, 0, p2, 0, MODE_SMA,i);
   }
   
   return(0);
  }
 
Forexman77:

Не получается получить значение четвертого буффера. Что делаю не правильно?


У меня в примере было несколько циклов. Избавились от ненужных?
 

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

подскажите, пожалуйста, из-за чего в окне настроек советника не удается поставить галочку "Разрешить вызов DLL"?

В настройках терминала такая-же включена. На других советниках - все нормально.

Этот советник пробую писать сам. Он использует вызов внешнего индикатора через iCustom, а тому, в свою очередь, необходимо обращение к DLL.

Спасибо за помощь.

 
Vinin:

У меня в примере было несколько циклов. Избавились от ненужных?
Пробовал по разному, но если делаю так:
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Lime
#property indicator_color2 Yellow
#property indicator_color3 Red
#property indicator_color4 Aqua

//--- input parameters
extern int       Period_MA_1=14;
extern int       p2          =7;
extern int       p3          =5;
extern int       p4          =3;
//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_NONE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,ExtMapBuffer3);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,ExtMapBuffer4);
   IndicatorDigits(Digits+1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted(),
   i,limit1,limit2,limit3,limit4;
   limit1=Bars-counted_bars-1;
   limit2=limit1;
   limit3=limit2;
   limit4=limit3;
   if(limit1>0) 
     {
      limit1=Bars-Period_MA_1-1;
      limit2=limit1-p2;
      limit3=limit2-p3;
      limit4=limit3-p4;
     }

   for(i=limit1;i>=0;i--) ExtMapBuffer1[i]=Close[i]-Close[i+Period_MA_1];
   for(i=limit2;i>=0;i--) ExtMapBuffer2[i]=MathAbs(ExtMapBuffer1[i]);
   for(i=limit3;i>=0;i--) ExtMapBuffer3[i]=ExtMapBuffer1[i]/ExtMapBuffer2[i];
   for(i=limit4;i>=0;i--) ExtMapBuffer4[i]=iMAOnArray(ExtMapBuffer3, 0, p2, 0, MODE_SMA,i);

   return(0);
  }

То третий и четвертый буффер не считает. Где ошибка не пойму. В этой области моих знаний недостаточно.

Хорошо бы не лепить все в разные буффера, а расчитать основную часть вот так:

 ExtMapBuffer1[i]=(Close[i]-Close[i+Period_MA_1])/MathAbs(Close[i]-Close[i+Period_MA_1]);
но в данном случае вообще везде пустота.
 
Forexman77:
Пробовал по разному, но если делаю так:

То третий и четвертый буффер не считает. Где ошибка не пойму. В этой области моих знаний недостаточно.

Хорошо бы не лепить все в разные буффера, а расчитать основную часть вот так:

но в данном случае вообще везде пустота.


По Вашей формуле результатом будет 1 или -1. Это так или ждете другого результата?
 
Vinin:

По Вашей формуле результатом будет 1 или -1. Это так или ждете другого результата?

Да, в третьем буффере будет 1 или -1. А в четвертом расчитывается скользящая средняя от этих параметров.

В третьем буффере еще значение, что делится умножается на 100, но это не проблемма.

 
Forexman77:

Да, в третьем буффере будет 1 или -1. А в четвертом расчитывается скользящая средняя от этих параметров.

В третьем буффере еще значение, что делится умножается на 100, но это не проблемма.


//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_color2 Yellow

//--- input parameters
extern int       Period_MA_1=14;
extern int       p2=7;
//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_HISTOGRAM);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted(),
   i,limit1,limit2;
   limit1=Bars-counted_bars-1;
   limit2=limit1;
   if(limit1>0)
     {
      limit1=Bars-Period_MA_1-1;
      limit2=limit1-p2;
     }

   for(i=limit1;i>=0;i--) 
     {
      ExtMapBuffer1[i]=1;
      if(Close[i]<Close[i+Period_MA_1])
         ExtMapBuffer1[i]=-1;
     }
   for(i=limit2;i>=0;i--) ExtMapBuffer2[i]=iMAOnArray(ExtMapBuffer1,0,p2,0,MODE_SMA,i);

   return(0);
  }
//+------------------------------------------------------------------+
Причина обращения: