Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 811

SILVERPRINT:

Все индикаторы созданные методами из стандартной библиотеки надо обновлять в ручную ?

Есть два метода 


Я так понял  первый нужен, если необходиммо автоматическое обновление?

А второй, просто Refresh чтобы в ручную, обновить один раз при тике весь массив данных? 


Покажите код, как Вы создаёте индикатор в советнике.

[Удален]
Vladimir Karputov:

Ничего не понял. Попробуйте перефразировать и поставить знаки препинания.


В mql4 информация от индикаторов по индексу ноль в тестере выдавала ласт дате из истории. Приходилось ибаршифтить в mql5 тоже самое?

SILVERPRINT:

В mql4 информация от индикаторов по индексу ноль в тестере выдавала ласт дате из истории. Приходилось ибаршифтить в mql5 тоже самое?


Перефразируйте. Поставьте знаки препинания. Пишите по русски.

[Удален]
Vladimir Karputov:

Покажите код, как Вы создаёте индикатор в советнике.

#include <Indicators\Trend.mqh>
#include <Indicators\Oscilators.mqh>
#include <Indicators\TimeSeries.mqh>

MqlTick infotick;
MqlDateTime currentTime;
CiMA ValueofMA200;
CiMA ValueofMA20;
CiMA ValueofMAHour;
CiATR atr;
CiTime timeh1;
CiTime timeD1;


   sym=_Symbol;
   ValueofMA200.Create(sym,PERIOD_D1,slowma,0,MODE_SMA,PRICE_CLOSE);
   ValueofMA20.Create(sym,PERIOD_D1,fastwma,0,MODE_SMA,PRICE_CLOSE);
   ValueofMAHour.Create(sym,PERIOD_H1,mahours,0,MODE_SMA,PRICE_CLOSE);
   atr.Create(sym,PERIOD_H1,200);
   timeh1.Create(sym,PERIOD_H1);
   timeD1.Create(sym,PERIOD_H1);
   
   timeh1.BufferResize(25);
   timeD1.BufferResize(200);
   
   timeh1.Refresh(PERIOD_H1);
   timeD1.Refresh(PERIOD_D1);

         ValueofMA200.Main(0);
         ValueofMA20.Main(0);
         ValueofMAHour.Main(0);    
         atr.Main(0);
Примерно так
SILVERPRINT:
Примерно так

Да, если использовать создание индикаторов через класс стандартной библиотеки, тогда, для получения данных, нужно использовать методы Refresh

[Удален]
Vladimir Karputov:

Да, если использовать создание индикаторов через класс стандартной библиотеки, тогда, для получения данных, нужно использовать методы Refresh

А как эти методы работают? что лучше использовать?

RefreshCurrent
Refresh
Я как понял RefreshCurrent затратный метод при каждом тике.
SILVERPRINT:

1) А как эти методы работают? 2) Что лучше использовать?


1) Пройдите в редакторе по этому методу (клик средней кнопки мышки на названии метода перекинет Вас в этот метод) - так Вы увидите, КАК работает этот метод. Рецепт универсален: клик средней кнопкой мышки на любом методе или функции перекидывает на сам код функции или метода.

2) На вкус и цвет друзей нет. Кто-то использует создание индикаторов через классы, кто-то через создание хендлов (iMA, iMACD ...).

[Удален]
Vladimir Karputov:

1) Пройдите в редакторе по этому методу (клик средней кнопки мышки на названии метода перекинет Вас в этот метод) - так Вы увидите, КАК работает этот метод. Рецепт универсален: клик средней кнопкой мышки на любом методе или функции перекидывает на сам код функции или метода.

2) На вкус и цвет друзей нет. Кто-то использует создание индикаторов через классы, кто-то через создание хендлов (iMA, iMACD ...).


На моей мышке нет средней кнопки, мышь из чистого серебра )).  Скорее всего за годы уже решили мои проблемы с оптимальным вызовом. Мне бы не хотелось при каждом тике весь массив обновлять. 

[Удален]

Как такое возможно вроде с математикой не было проблем?

input double    T_P  =0.81;
input double    S_L  =0.35;

b_ep=price-atrH1200;
b_sl=b_ep-(b_ep*S_L)/100;
b_tp=b_ep+(b_ep*T_P)/100;

Вроде  1.05 * 0.81/100 = 0.008505

А дает 35% стоп и 81% текпрофит вместо 0.81% и 0.35%

SellLimit(LOT_FOR_TRADE,s_ep,symb,s_sl,s_tp,ORDER_TIME_DAY,0,"SellLimit");

BuyLimit(LOT_FOR_TRADE,b_ep,symb,b_sl,b_tp,ORDER_TIME_DAY,0,"BuyLimit");

Метод из стандартной библиотеки SellLimit&BuyLimit


Print(s_ep,"s_ep");
Print(s_sl,"s_sl");
Print(s_tp,"s_tp");

Принт показывает:

2017.12.24 07:55:27.559 2017.01.03 16:54:17   1.04236745s_ep

2017.12.24 07:55:27.559 2017.01.03 16:54:17   1.25084094s_sl

2017.12.24 07:55:27.559 2017.01.03 16:54:17   0.521183725s_tp


SILVERPRINT:

Как такое возможно вроде с математикой не было проблем?

Вроде  1.05 * 0.81/100 = 0.008505

А дает 35% стоп и 81% текпрофит вместо 0.81% и 0.35%

Метод из стандартной библиотеки SellLimit&BuyLimit


Принт показывает:

2017.12.24 07:55:27.559 2017.01.03 16:54:17   1.04236745s_ep

2017.12.24 07:55:27.559 2017.01.03 16:54:17   1.25084094s_sl

2017.12.24 07:55:27.559 2017.01.03 16:54:17   0.521183725s_tp



Перепишите этот же код, но так, чтобы ВСЕ переменные были объявлены. Посмотрю какие типы переменных Вы объявляете. А там уже и до правильного решения рукой подать.