помогите в Коде

 

В обще написал себе помогатор чтоб определять просадку  от уравней фибаначи. Но скрипт щитает невесть что. Калькулятором щитаю всё гуд, формулы точьны, алгаритм выдаёт ересь. Гдето чтото упустил. Гляньте может наведёте меня на мысль.

//+------------------------------------------------------------------+
//|                                                           CL.mq4 |
//|                                              Kopanitskyy Evgeniy |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Kopanitskyy Evgeniy"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
extern datetime bar_time=D'2017.07.11 08:00';
extern double Level=100;
extern double LotSize=0.01;
extern double AfterComa=0.00001;
extern int NormalizaDigi=5;//--- Digits after coma
//extern  double SHIFT=0;


//+---------------------------------------------------
//---------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
int SHIFT=iBarShift(Symbol(),0,bar_time);
double HIGHT=iHigh(Symbol(),0,SHIFT);
double LOW=iLow(Symbol(),0,SHIFT);
double CLOSE=iClose(Symbol(),0,SHIFT);
double OPEN=iOpen(Symbol(),0,SHIFT);
double normalLevel=Level*Point;
double center = HIGHT-((HIGHT-LOW)/2);

//Расчёт Уравня

double BUY61_8=NormalizeDouble(((((LEVELUP-HIGHT)/23.6)*61.8)+HIGHT),NormalizaDigi);// BUY 61.8

//-------------------------Расчет просадки от центра до уравня для Лонга---------------------
double onePT=(LotSize*AfterComa)/CLOSE; //Стоимость 1 пункта расчёт от центральной оси
double Prosadka61_8= (center-SELL61_8)*onePT;// Колличество пунктов от центра до уравня
Comment(Symbol(),"  ",onePT,"  ",Prosadka61_8);
ExpertRemove();
return(INIT_SUCCEEDED);
  
  
  
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  

   
  }
//+------------------------------------------------------------------+

В сути ввод данных вверху. Вводимые параметры это свечя. И определённый уравень. Протестиравать можно так как есть.

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 

Сначала откомпилировать попробуйте

 
Dmitry Fedoseev:

Сначала откомпилировать попробуйте


Чють подправил

//+------------------------------------------------------------------+
//|                                                           CL.mq4 |
//|                                              Kopanitskyy Evgeniy |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Kopanitskyy Evgeniy"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
extern datetime bar_time=D'2017.07.11 08:00';
extern double Level=100;
extern double LotSize=0.01;
extern double AfterComa=0.00001;
extern int NormalizaDigi=5;//--- Digits after coma
//extern  double SHIFT=0;


//+---------------------------------------------------
//---------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
int SHIFT=iBarShift(Symbol(),0,bar_time);
double HIGHT=iHigh(Symbol(),0,SHIFT);
double LOW=iLow(Symbol(),0,SHIFT);
double CLOSE=iClose(Symbol(),0,SHIFT);
double OPEN=iOpen(Symbol(),0,SHIFT);
double normalLevel=Level*Point;
double center = HIGHT-((HIGHT-LOW)/2);

//Расчёт Уравня
double LEVELUP=NormalizeDouble((HIGHT+normalLevel),NormalizaDigi);
double LEVELDOWN=NormalizeDouble((LOW-normalLevel),NormalizaDigi);

double SELL61_8=NormalizeDouble( (LOW-(((LOW-LEVELDOWN)/23.6)*61.8)),NormalizaDigi);




//-------------------------Расчет просадки от центра до уравня для Лонга---------------------
double onePT=(LotSize*AfterComa)/CLOSE; //Стоимость 1 пункта расчёт от центральной оси
double Prosadka61_8= (center-SELL61_8)*onePT;// Колличество пунктов от центра до уравня

Comment(Symbol()," ",onePT,"  ",Prosadka61_8);
//ExpertRemove();
return(INIT_SUCCEEDED);
  
  
  
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  

   
  }
//+------------------------------------------------------------------+
 

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

Много непонятного. Вот эта строчка кажется странной:

double SELL61_8=NormalizeDouble( (LOW-(((LOW-LEVELDOWN)/23.6)*61.8)),NormalizaDigi);

Вот эта еще страннее:

double onePT=(LotSize*AfterComa)/CLOSE; //Стоимость 1 пункта расчёт от центральной оси
 
Dmitry Fedoseev:

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

Много непонятного. Вот эта строчка кажется странной:

Вот эта еще страннее:

Первая строка это расчет уровня  по Фибоначчи. от определённой свечи рассчитывается уровень 61.8 вниз. Всё расчеты не могу озвучить так как цифра расчета вписывается в исходные данные

Вторая строка это формула по которой рассчитывают стоимость одного пункта. 

LotSize=0.01 

AfterComa - количество знаков после запятой по текущей валютной паре. 

Close - понятно. Цена закрытия текущей свечи.

 
Yevheniy Kopanitskyy:  AfterComa - количество знаков после запятой по текущей валютной паре.

Это вроде SYMBOL_DIGITS

 

Посмотрите через принт промежуточные значения: чему равно onePT, в чем смысл делить CLOSE? 

Посмотрите чему равно (center-SELL61_8).

 
Dmitry Fedoseev:

Посмотрите через принт промежуточные значения: чему равно onePT, в чем смысл делить CLOSE? 

Посмотрите чему равно (center-SELL61_8).


руками это выглядит вот так 

Примеры вычисления стоимости пункта:
Валютная пара: GBPUSD Лот: 10000
Стоимость пункта = (10000*0.0001) / 1 = 1$

Где 10000- Колличество лотов умноженные на колличество знаков после запятой и поделённые на текущую цену. x=(a*b)/c;

В моём случаи я делаю тоже самое

Входные параметры перемножаю и делю на Закрытие свечи и получаю значение в onePT - стоимость одного пункта.

Далее по формуле 

double SELL61_8=NormalizeDouble( (LOW-(((LOW-LEVELDOWN)/23.6)*61.8)),NormalizaDigi);

получаю колличество пунктов от точьки входа в рынок и умножаю на стоимость.

double Prosadka61_8= (center-SELL61_8)*onePT;

По идее должно получатся на выходе сумма  в единице текущего инструмента.

а получается бог весть что. Не вижу где ошибка :(

 

Выведите через принт и посмотрите, какие там пункты получаются в SELL61_8 и в (center-SELL61_8)

 
Dmitry Fedoseev:

Выведите через принт и посмотрите, какие там пункты получаются в SELL61_8 и в (center-SELL61_8)

Вот конкретный пример

Здесь явно видно что center - 1.175455  SELL61_8 - 1.17157

отнимаем по формуле  и получаем 0,00388 - 388 пунктов просадки.


Как видим отнимание производится не корректно не пойму почему

 
Yevheniy Kopanitskyy:

Вот конкретный пример

Здесь явно видно что center - 1.175455  SELL61_8 - 1.17157

отнимаем по формуле  и получаем 0,00388 - 388 пунктов просадки.


Как видим отнимание производится не корректно не пойму почему


1.175455  затем 1.17157, а третье число откуда такое? Оно даже не 0,00388.