Народ помогите пожалуйста поправить индикатор, это мой первый опыт и не получается разобраться, необходимо что бы показывал если цена в данный момент больше минимальной цены за прошлый час на 0.1% и более.
Как сделать так что бы он брал именно текущую цену и сравнивал ее с минимальной предыдущего часа?
Если по быстрому, то как то так
//+------------------------------------------------------------------+ #property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 1 //--- plot Label1 #property indicator_label1 "Label1" #property indicator_type1 DRAW_SECTION #property indicator_color1 clrLime #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //---- Входные параметры input double Percent = 0.1; //---- Переменные индикатора double ExtMapBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- SetIndexBuffer(0, ExtMapBuffer, INDICATOR_DATA); PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0); //--- return(INIT_SUCCEEDED); } //-------------------------------------------------------------------+ //| Функция процесса | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int i = rates_total - 1; if(prev_calculated <= 0) ArrayInitialize(ExtMapBuffer, 0); //--- Отмечаем если текущая цена больше минимальной цены за предыдущий час на 0.1% и более if(ExtMapBuffer[i] == 0 || ExtMapBuffer[i] == EMPTY_VALUE) if(iClose(_Symbol, PERIOD_CURRENT, 0) - low[i - 1] >= low[i - 1] * Percent / 100) { ExtMapBuffer[i] = high[i]; ExtMapBuffer[i - 1] = low[i - 1]; } else ExtMapBuffer[i] = 0; return(rates_total); } //+------------------------------------------------------------------+
Запустите в тестере, так как этот код будет работать только онлайн.
Линии будут не совсем такие как вы ожидаете, точнее совсем не такие)))
Для ваших целей я не смог подобрать стиль рисования. Для отрисовки линий вам лучше использовать графические объекты - OBJ_TREND.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Sergey Golubev, 2020.03.23 16:08
Вставляйте правильно код -
----------------
MQL5.community - Памятка пользователя
Кнопка предназначена для вставки исходного кода в текст сообщения. При нажатии появляется пустое окно, в которое необходимо вставить код и далее нажать кнопку Вставить. Для отмены вставки кода необходимо нажать кнопку Отмена.
Если по быстрому, то как то так
Запустите в тестере, так как этот код будет работать только онлайн.
Линии будут не совсем такие как вы ожидаете, точнее совсем не такие)))
Для ваших целей я не смог подобрать стиль рисования. Для отрисовки линий вам лучше использовать графические объекты - OBJ_TREND.
Спасибо большое, но все равно почему то не работает))
Должно как то так получится как на скрине, а как такой код прописать до сих пор не пойму..
Спасибо большое, но все равно почему то не работает))
Должно как то так получится как на скрине, а как такой код прописать до сих пор не пойму..
Можно попробовать заменить
#property indicator_separate_window
if(iClose(_Symbol, PERIOD_CURRENT, 0) - low[i - 1] >= low[i - 1] * Percent / 100) { ExtMapBuffer[i] = 1; } else ExtMapBuffer[i] = 0;
Если по быстрому, то как то так
Запустите в тестере, так как этот код будет работать только онлайн.
Линии будут не совсем такие как вы ожидаете, точнее совсем не такие)))
Для ваших целей я не смог подобрать стиль рисования. Для отрисовки линий вам лучше использовать графические объекты - OBJ_TREND.
Жуть ...
Согласен, жуть)))
Но какой вопрос, такой и ответ.
К тому же он вообще не стал читать, что я написал. Говорит не рисует.
А у меня, почему то рисует. Судя по всему человеку нужен готовый индикатор, а слова "помогите поправить индикатор", так для отмазки.
Делаем так
if(ExtMapBuffer[i] == 0 || ExtMapBuffer[i] == EMPTY_VALUE) if(iClose(_Symbol, PERIOD_CURRENT, 0) - low[i - 1] >= low[i - 1] * Percent / 100) { ExtMapBuffer[i] = 3; ExtMapBuffer[i - 1] = 1; }
и опять рисует
Для понимания процесса, вполне достаточный код, имхо.
А если нужен полноценный индикатор, то пусть сам постарается, если стараться не охота или некогда, есть фриланс.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Народ помогите пожалуйста поправить индикатор, это мой первый опыт и не получается разобраться, необходимо что бы показывал если цена в данный момент больше минимальной цены за прошлый час на 0.1% и более.
Как сделать так что бы он брал именно текущую цену и сравнивал ее с минимальной предыдущего часа?
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots 1
//--- plot Label1
#property indicator_label1 "Label1"
#property indicator_type1 DRAW_LINE
#property indicator_color1 Lime
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
//---- Входные параметры
input double Percent=0.1;
//---- Переменные индикатора
double ExtMapBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
SetIndexBuffer(0,ExtMapBuffer,INDICATOR_DATA);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Функция процесса |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
int limit=MathMin(rates_total,prev_calculated+1);
for(int i=0; i<limit; i++)
{
//--- Отмечаем если текущая цена больше минимальной цены за предыдущий час на 0.1% и более
if ( (high[i]/min_price-1)*100>=Percent )
ExtMapBuffer[i]=high[i];
else
ExtMapBuffer[i]=EMPTY_VALUE;
}
return(rates_total);
}
//+------------------------------------------------------------------+