Как кодировать? - страница 317

 

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

Я думаю, как я могу закодировать этот индикатор/инструменты.

Мне нужен индикатор, скрипт или что-то подобное, где я могу задать некоторый диапазон в днях (например 12/10/2012-15/10/2012 или 15/10/2012-15/10/2012) и после этого записать в csv или excel файл open high low и close для свечи, отображаемой на графике в зависимости от ТФ (например, если я задаю только один день и прикрепляю его в 1hr ТФ, он записывает 24 свечи с их спецификацией).

Заранее благодарю за помощь

 

Проблема с сигналом алерта.

Привет всем в доме, есть небольшая проблема с кодом MT4, который я написал. Этот код должен следить за тремя индексами, stoichastic, RSI и CCI. Если stoichastic пересекает свою сигнальную линию вверх или вниз и RSI периода 70 и 6 пересекает друг друга вверх или вниз и CCI выше или ниже нуля, должен быть сигнал на покупку, если все 3 индекса выше своих сигнальных линий или должен быть сигнал на продажу, если 3 индекса ниже своих сигнальных линий........ Этот код работает, но когда появляется алерт, он повторяется на каждом тике свечи. Что я могу сделать, чтобы этот алерт звучал только один раз, если три условия выполнены на текущей свече, и не повторялся. вот код ниже.

if(Period()==240){

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0);

double ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0);

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

double RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0);

double b4enCCI=iCCI(NULL,240,6,PRICE_TYPICAL,1);

double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0);

double b4trCCI=iCCI(NULL,240,14,PRICE_TYPICAL,1);

double nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0);

// предупреждения

if((ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI>0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)){

Alert("Стрелка на покупку","\n","Текущее время ",TimeToStr(CurTime()),"\n",Symbol());

}

if((ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)){

Alert("Стрелка на продажу","\n", "Текущее время ",TimeToStr(CurTime()),"\n",Symbol());

}

}

 
mladen:
pooh

Просто потому, что значения разных инструментов могут сильно отличаться (например, GBPJPY сейчас около 126, а EURUSD примерно в 100 раз меньше - когда вы наносите эти значения на один и тот же график, значение EURUSD просто "выпадает из картинки, потому что metatrader берет значения GBPJPY в качестве критерия масштабирования графика).

Посмотрите на эту тему: https: //www.mql5.com/en/forum/178052. В этой теме уже есть несколько решений для похожих проблем.

Спасибо, Младен. Перешел по вашей ссылке и нашел индикатор, который мне подходит.

pooh

 

Попробуйте вот так :

if(Period()==240)

{

static datetime lastAlerted=0;

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0);

double ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0);

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

double RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0);

double b4enCCI=iCCI(NULL,240,6,PRICE_TYPICAL,1);

double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0);

double b4trCCI=iCCI(NULL,240,14,PRICE_TYPICAL,1);

double nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0);

// alerts

if((ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI >0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0]; Alert("Buy Arrow","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

if((ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI <0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0]; Alert("Sell Arrow","\n","Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

}
Mastercash:
Если стохастик пересекает свою сигнальную линию вверх или вниз, RSI периода 70 и 6 пересекает друг друга вверх или вниз, а CCI выше или ниже нуля, то должен быть сигнал на покупку, если все 3 индекса выше своих сигнальных линий, или должен быть сигнал на продажу, если все 3 индекса ниже своих сигнальных линий........ Этот код работает, но когда появляется сигнал, он повторяется на каждом тике свечи. Что я могу сделать, чтобы этот сигнал звучал только один раз, если три условия выполнены на текущей свече, и не повторялся. вот код ниже.

if(Period()==240){

double ist_main=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_MAIN,0);

double ist_signal=iStochastic(NULL,240,8,3,3,MODE_SMA,0,MODE_SIGNAL,0);

double RSIP1=iRSI(NULL,240,14,PRICE_CLOSE,0);

double RSIP2=iRSI(NULL,240,70,PRICE_CLOSE,0);

double b4enCCI=iCCI(NULL,240,6,PRICE_TYPICAL,1);

double nowenCCI=iCCI(NULL,240,6,PRICE_TYPICAL,0);

double b4trCCI=iCCI(NULL,240,14,PRICE_TYPICAL,1);

double nowtrCCI=iCCI(NULL,240,14,PRICE_TYPICAL,0);

// предупреждения

if((ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI>0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)){

Alert("Стрелка на покупку","\n", "Текущее время ",TimeToStr(CurTime()),"\n",Symbol());

}

if((ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)){

Alert("Стрелка на продажу","\n", "Текущее время ",TimeToStr(CurTime()),"\n",Symbol());

}

}
 

Проблемы с алертом

Спасибо, mladen, я попробую. Я никогда не обращал внимания на функцию LastAlert() и, пожалуйста, вы можете дать мне знать, где взять каталог всех этих "транш руз" mt4 функций.

 

Mastercash

Будьте внимательны: это не функция, а статическая переменная, которая используется для хранения времени (времени бара) последнего алерта и таким образом предотвращает множественные алерты на одном и том же баре. К сожалению, в metatrader нет такой функции, как LastAlert(), поэтому нам приходится искать обходные пути, как в примере, чтобы решить проблему отсутствия функций.

Mastercash:
Спасибо, mladen, я попробую. Я никогда не обращал внимания на функцию LastAlert(), и, пожалуйста, вы можете дать мне знать, где взять каталог всех этих "транш руз" функций mt4.
 

Привет, Младен.

Мне нужно назначить 24 переменные для 24 дневных свечей последнего часа.

Мне нужно сделать некоторые вычисления со свечой и результат будет назначен в буфер.

Как я могу написать код для работы с каждой из 24 часовых свечей предыдущего дня?

Спасибо

 

dasio

Вы можете использовать нечто подобное (в этом режиме не используются массивы). Кроме того, этот пример для текущего дня.

datetime startTime = iTime(NULL,PERIOD_D1,0);

for (int i=iBarShift(NULL,PERIOD_H1,startTime); TimeDayOfYear(iTime(NULL,PERIOD_H1,i))==TimeDayOfYear(startTime); i--)

{

//

//

// processing the hourly data ... just an example here

//

//

double close = iClose(NULL,PERIOD_H1,i); //

double open = iOpen(NULL,PERIOD_H1,i); // and so on ...

}

dasio:
Привет, Младен.

Мне нужно назначить 24 переменные для 24 свечей последнего часа дня.

Мне нужно сделать некоторые вычисления со свечами и результат будет присвоен буферу.

Как я могу написать код для работы с каждой из 24 часовых свечей предыдущего дня?

Спасибо
 
mladen:
dasio

Вы можете использовать нечто подобное (в этом режиме не используются массивы). Кроме того, этот пример для текущего дня

datetime startTime = iTime(NULL,PERIOD_D1,0);

for (int i=iBarShift(NULL,PERIOD_H1,startTime); TimeDayOfYear(iTime(NULL,PERIOD_H1,i))==TimeDayOfYear(startTime); i--)

{

//

//

// processing the hourly data ... just an example here

//

//

double close = iClose(NULL,PERIOD_H1,i); //

double open = iOpen(NULL,PERIOD_H1,i); // and so on ...

}

Спасибо mladen.

В этом примере:

double close = iClose(NULL,PERIOD_H1,i); //

double open = iOpen(NULL,PERIOD_H1,i); //

Какая свеча представлена и как я могу переключиться на следующую свечу? i+1?

Спасибо

 

dasio

Он уже перебирает все часы текущего дня. Я поместил iClose() и iOpen() просто как пример вызова из таймфрейма, отличного от 1 часа. Если вы хотите получить доступ к дню, отличному от текущего, то замените "0" в datetime startTime=iTime(NULL,PERIOD_D1,0); на любой день, за который вы хотите получить данные.

dasio:
Спасибо mladen.

В этом примере:

double close = iClose(NULL,PERIOD_H1,i); //

double open = iOpen(NULL,PERIOD_H1,i); //.

Какая свеча представлена и как я могу переключиться на следующую свечу? i+1?

Спасибо
Причина обращения: