Уважаемый granit77! Если Вас не затруднит, внесите исправления прямо в код, если что не так, пожалуйста. Это будет наглядно и понятно.
Пример. Из имеющихся восьми индикаторных буферов семь используются для отображения линий в окне индикатора, восьмой используется для расчетов, без отображения в окне индикатора. Если не хватает индикаторных буферов, расчеты можно проводить в обычных массивах.
#property indicator_buffers 7
double ind_buffer1[];
double ind_buffer2[];
double ind_buffer3[];
double ind_buffer4[];
double ind_buffer5[];
double ind_buffer6[];
double ind_buffer7[];
double ind_buffer8[];// Восьмой буфер используется для дополнительных расчётов
//double ind_buffer9[]; //ну нету в индикаторе девятого буфера, этот массив некуда сунуть
int init()
{
IndicatorBuffers(8);
SetIndexBuffer(0,ind_buffer1);
SetIndexBuffer(1,ind_buffer2);
SetIndexBuffer(2,ind_buffer3);
SetIndexBuffer(3,ind_buffer4);
SetIndexBuffer(4,ind_buffer5);
SetIndexBuffer(5,ind_buffer6);
SetIndexBuffer(6,ind_buffer7);
SetIndexBuffer(7,ind_buffer8);
//ind_buffer1...ind_buffer7 рисуют семь линий
//они отображаются в окне индикатора согласно #property indicator_buffers 7
//ind_buffer8 не отображается в окне, но доступен для участия в расчетах
return(0);
}
granit77: Пример. Из имеющихся восьми индикаторных буферов семь используются для отображения линий в окне индикатора, восьмой используется для расчетов, без отображения в окне индикатора. Если не хватает индикаторных буферов, расчеты можно проводить в обычных массивах.
Спасибо! Это понятно.
Не понятно другое. Не понятно, зачем массив участвующий в расчетах и не отображаемый в окне индикатора идентифицировать как SetIndexBuffer. И если для расчётов требуется 10 массивов и 8 для отображения (всего 18), то как правильно объявить эти 10 и их идентифицировать? Хотелось, чтобы они обладали теми же свойствами что и массивы привязанные к индикаторным буферам, разве что только не рисовались.
Не надо его переименовывать, если уж не получается. Что странно. Открыть его можно из контекстного меня мыши, выбрав WinRar. Или открыть WinRar, потом из меню "Файл" пункт "Открыть архив" найти архив и открыть.
Написал же выше, что расширение нужно только для автоматической ассоциации файла.
Видимость расширений включил? Скрин или видео сюда, если не получается.
Спасибо за подробние указания. Я таки скачал єтот WinRar, видимо его не біло, и архив открился!
Ві знаете, не вижу работи функции. Правдо, тики щас не идут, но хоть при присоединении к графику старт ведь должен сработать? Ну, хоть компиллируется!! Пробую так
//+------------------------------------------------------------------+//| таймфрейммм.mq4 |//| Copyright 2012, MetaQuotes Software Corp. |//| http://www.metaquotes.net |//+------------------------------------------------------------------+#property copyright "Copyright 2012, MetaQuotes Software Corp."#property link "http://www.metaquotes.net"#include <ServicesMT4.mqh>void start()
{
int hwndChart = WindowHandle(Symbol(),Period());
while (!IsStopped())
{
for (int i = 0; i < 9; i++)
{
ServiceSetTimeframeByNumber(hwndChart, i);
Sleep(4000);
}
}
}
//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init()
{
//----//----return(0);
}
//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//----//----return(0);
}
//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+
PR //Прибыль UB //Убыток Pk //Переменная принимающая значения покупки Pr //Переменная принимающая значения продажи ADR //Переменная принимающая значения скрипта
//Условия на прибыль if(PR==Pk) //Если прибыль по покупке ADR=1; //Установиться скрипт 1 else //Если прибыль по продаже ADR=2; //Установиться скрипт 2
//Условия на продажу if(UB==Pk) //Если убыток по покупке ADR=2; //Установиться скрипт 2 else //Если убыток по продаже
ADR=1; //Установиться скрипт 1
Как это доработать под торговлю? Нужно чтобы советник следил за тем, какой ордер закрылся (buy или sell), и как закрылся с профитом или лоссом. И после такого анализа исполнял 1 или 2 скрипт.
Dimka-novitsek: Ві знаете, не вижу работи функции. Правдо, тики щас не идут, но хоть при присоединении к графику старт ведь должен сработать? Ну, хоть компиллируется!! Пробую так
Тиков нет. Старт не срабатыват. Можно скомпилировать, как скрипт. Но надо будет указать дескриптор соседнего графика, который будет обновляться.
Или так:
#include <ServicesMT4.mqh>int hwndChart = NULL;
void init()
{
hwndChart = WindowHandle(Symbol(),Period()); // Получаем системный дескриптор графика.
ServiceRefreshChart(hwndChart, 1000); // Запускаем обновление графика каждую 1 секунду.
}
void start()
{
ServiceStopRefreshChart(hwndChart); // Останавливаем обновление. Больше не требуется.
while (!IsStopped())
{
for (int i = 0; i < 9; i++)
{
ServiceSetTimeframeByNumber(hwndChart, i);
Sleep(4000);
}
}
}
Но, наверно, работать у тебя не будет. Кажется, функция ServiceRefreshChart() не всем доступна.
Можно в индикаторе попробывать. Там при присоединении к графику и при смене ТФ 2 раза старт обновляется.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Нате вам :
ошибка incompatible types
Уважаемый granit77! Если Вас не затруднит, внесите исправления прямо в код, если что не так, пожалуйста. Это будет наглядно и понятно.
Если не хватает индикаторных буферов, расчеты можно проводить в обычных массивах.
#property indicator_buffers 7 double ind_buffer1[]; double ind_buffer2[]; double ind_buffer3[]; double ind_buffer4[]; double ind_buffer5[]; double ind_buffer6[]; double ind_buffer7[]; double ind_buffer8[];// Восьмой буфер используется для дополнительных расчётов //double ind_buffer9[]; //ну нету в индикаторе девятого буфера, этот массив некуда сунуть int init() { IndicatorBuffers(8); SetIndexBuffer(0,ind_buffer1); SetIndexBuffer(1,ind_buffer2); SetIndexBuffer(2,ind_buffer3); SetIndexBuffer(3,ind_buffer4); SetIndexBuffer(4,ind_buffer5); SetIndexBuffer(5,ind_buffer6); SetIndexBuffer(6,ind_buffer7); SetIndexBuffer(7,ind_buffer8); //ind_buffer1...ind_buffer7 рисуют семь линий //они отображаются в окне индикатора согласно #property indicator_buffers 7 //ind_buffer8 не отображается в окне, но доступен для участия в расчетах return(0); }Пример. Из имеющихся восьми индикаторных буферов семь используются для отображения линий в окне индикатора, восьмой используется для расчетов, без отображения в окне индикатора.
Если не хватает индикаторных буферов, расчеты можно проводить в обычных массивах.
Спасибо! Это понятно.
Не понятно другое. Не понятно, зачем массив участвующий в расчетах и не отображаемый в окне индикатора идентифицировать как SetIndexBuffer. И если для расчётов требуется 10 массивов и 8 для отображения (всего 18), то как правильно объявить эти 10 и их идентифицировать? Хотелось, чтобы они обладали теми же свойствами что и массивы привязанные к индикаторным буферам, разве что только не рисовались.
Не надо его переименовывать, если уж не получается. Что странно. Открыть его можно из контекстного меня мыши, выбрав WinRar. Или открыть WinRar, потом из меню "Файл" пункт "Открыть архив" найти архив и открыть.
Написал же выше, что расширение нужно только для автоматической ассоциации файла.
Видимость расширений включил? Скрин или видео сюда, если не получается.
Спасибо за подробние указания. Я таки скачал єтот WinRar, видимо его не біло, и архив открился!
UB //Убыток
Pk //Переменная принимающая значения покупки
Pr //Переменная принимающая значения продажи
ADR //Переменная принимающая значения скрипта
//Условия на прибыль
if(PR==Pk) //Если прибыль по покупке
ADR=1; //Установиться скрипт 1
else //Если прибыль по продаже
ADR=2; //Установиться скрипт 2
//Условия на продажу
if(UB==Pk) //Если убыток по покупке
ADR=2; //Установиться скрипт 2
else //Если убыток по продаже
ADR=1; //Установиться скрипт 1
Как это доработать под торговлю? Нужно чтобы советник следил за тем, какой ордер закрылся (buy или sell), и как закрылся с профитом или лоссом. И после такого анализа исполнял 1 или 2 скрипт.
Ві знаете, не вижу работи функции. Правдо, тики щас не идут, но хоть при присоединении к графику старт ведь должен сработать? Ну, хоть компиллируется!! Пробую так
Тиков нет. Старт не срабатыват. Можно скомпилировать, как скрипт. Но надо будет указать дескриптор соседнего графика, который будет обновляться.
Или так:
Но, наверно, работать у тебя не будет. Кажется, функция ServiceRefreshChart() не всем доступна.
Можно в индикаторе попробывать. Там при присоединении к графику и при смене ТФ 2 раза старт обновляется.