Помощь в кодировании - страница 239

 

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

Я модифицировал стандартный индикатор stepMA 9 в этот в отдельном окне в виде гистограммы, но я не знаю, почему сигналы на покупку не синхронизируются со стандартным индикатором (сигналы на продажу синхронизируются). С новым индикатором они возникают на один бар назад, чем с оригинальным индикатором. Почему? Я изменил только ту часть кода, которая определяет графический аспект индикатора.

stepma_9_histo_mtf.mq4

stepma_9.0.mq4

Файлы:
 
thefxpros:
Привет,

Я модифицировал стандартный индикатор stepMA 9 в этот в отдельном окне в виде гистограммы, но я не знаю, почему сигналы на покупку не синхронизируются со стандартным индикатором (сигналы на продажу синхронизируются). С новым индикатором они возникают на один бар назад, чем с оригинальным индикатором. Почему? Я изменил только ту часть кода, которая определяет графический аспект индикатора.

stepma_9_histo_mtf.mq4

stepma_9.0.mq4

thefxpros

Это результат того, как рисуются линии.

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

Файлы:
 

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

Я искал советника, который открывал бы сделку аналогично тому, как работает трейлинг-стоп.

Допустим, я жду коррекции на инструменте. Я бы хотел открыть сделку как можно выше (или ниже) по цене. Поэтому с таким советником я смогу установить параметры своей сделки, а советник будет следовать за ценой так же, как и трейлинг-стоп. Когда происходит разворот, сделка срабатывает и открывается.

Вы когда-нибудь видели такого советника?

Спасибо

 

Привет всем

Я попробовал сделать код, но почему не могу открыть сделку?

int varCurrentTime = TimeCurrent();

for (int iTS = 0; iTS < 2000; iTS++) {

int varZonStart = StrToTime(TimeToStr(varCurrentTime, TIME_DATE) + " " + "00:00");

int varZonEnd = StrToTime(TimeToStr(varCurrentTime, TIME_DATE) + " " + "10:00");

int JamStart=TimeHour(varZonStart);

int JamEnd=TimeHour(varZonEnd);

if (JamStart>JamEnd) {

varCurrentTime = decDateTradeDay(varCurrentTime);

//if (TimeDayOfWeek(varCurTime) < 1) varCurTime = decDateTradeDay(varCurTime);

if (TimeDayOfWeek(varCurrentTime) > 5) varCurrentTime = decDateTradeDay(varCurrentTime);

}

varZonStart = StrToTime(TimeToStr(varCurrentTime, TIME_DATE) + " " + "00:00");

int varShiftStart = iBarShift(NULL, 0, varZonStart - 60 * Period());

int varShiftEnd = iBarShift(NULL, 0, varZonEnd);

varHighest = High;

varLowest = Low;

varCurrentTime = decDateTradeDay(varCurrentTime); //set 1 hari kebelakang

if (TimeDayOfWeek(varCurrentTime) < 1) varCurrentTime = decDateTradeDay(varCurrentTime); //jika minggu mundur lagi

if (TimeDayOfWeek(varCurrentTime) > 5) varCurrentTime = decDateTradeDay(varCurrentTime); //jika sabtu mundur lagi

}

for (int iTSh = 0; iTSh < 2000; iTSh++) {

for (int iTSl = 0; iTSl < 2000; iTSl++) {

if(((varHighest-varLowest)/Pip)<=5) varHL=(varHighest+varLowest)/2;

}

}

double isg10a = iOpen(Symbol(),PERIOD_M15,1);

double isg10b = iClose(Symbol(),PERIOD_M15,1);

int static isg10c = -1;

for (iTS = 0; iTS < 2000; iTS++) {

if(isg10avarHL)isg10c =0;

if(isg10a>varHL&&isg10b<varHL)isg10c =1;

}

if (isg10c==0) To code Buy

else if (isg10c==1) To code Sel

else no trade

 
mladen:
Jim Вместо того, чтобы переписывать все заново, я добавил ограничение на расчет баров, а затем все эти бары пересчитываются. Это должно решить проблему обновления (просто держите BarsTocalculate на каком-то разумном - не слишком большом и не слишком маленьком значении. Я использовал 1000 по умолчанию, и, кажется, все в порядке). Попробуйте

Уважаемый mladen,

большое спасибо за ваши усилия и очень быструю помощь.

Я буду пробовать.

С наилучшими пожеланиями из Мюнхена

 

Пожалуйста, помогите мне обновить этот индикатор объема, чтобы прикрепить его на мой mt4

Здравствуйте, гуру, пожалуйста, помогите мне исправить ошибки в этом индикаторе объема. Недавно я заметил, что он не может прикрепиться к моему графику mt4. Я сделал все возможное, чтобы исправить ошибки в файле, но безрезультатно. Я подозреваю, что это связано с огромным обновлением mt4. Все остальные индикаторы в моей папке mt4, как старые, так и новые версии, работают нормально. Он работал год назад, когда я использовал его в последний раз. Я еще не программист.

Пожалуйста, найдите прикрепленный файл

 

Привет MLaden и Mrtools,

Надеюсь, у вас все в порядке.

Мне нужно ваше подтверждение по поводу RSX.

Я вижу, что вы используете более простую формулу для расчета RSX:

__________________________

двойной Кг = (3.0)/(2.0+Длина);

double Hg = 1.0-Kg;

if (slope[limit]==-1) CleanPoint(limit,rsxDa,rsxDb);

if (ArrayRange(wrkBuffer,0) != Bars) ArrayResize(wrkBuffer,Bars);

for(i=limit, r=Bars-i-1; i>=0; i--, r++)

{

wrkBuffer[r][12] = iMA(NULL,0,1,0,MODE_SMA,Price,i);

if (i==(Bars-1)) { for (int c=0; c<12; c++) wrkBuffer[r][c] = 0; continue; }

//

//

//

//

//

double mom = wrkBuffer[r][12]-wrkBuffer[r-1][12];

double moa = MathAbs(mom);

for (int k=0; k<3; k++)

{

int kk = k*2;

wrkBuffer[r][kk+0] = Kg*mom + Hg*wrkBuffer[r-1][kk+0];

wrkBuffer[r][kk+1] = Kg*wrkBuffer[r][kk+0] + Hg*wrkBuffer[r-1][kk+1]; mom = 1.5*wrkBuffer[r][kk+0] - 0.5 * wrkBuffer[r][kk+1];

wrkBuffer[r][kk+6] = Kg*moa + Hg*wrkBuffer[r-1][kk+6];

wrkBuffer[r][kk+7] = Kg*wrkBuffer[r][kk+6] + Hg*wrkBuffer[r-1][kk+7]; moa = 1.5*wrkBuffer[r][kk+6] - 0.5 * wrkBuffer[r][kk+7];

}

if (moa != 0)

rsx = MathMax(MathMin((mom/moa+1.0)*50.0,100.00),0.00);

else rsx = 50;

____________________________________

Просто для того, чтобы убедиться, что вы понимаете, как RSX рассчитывается с помощью этой формулы.

Сначала со строкой:

mom = wrkBuffer[r][12]-wrkBuffer[r-1][12];

на самом деле wrkBuffer[r][12] - это простая скользящая средняя цены, обратите внимание на цену, как у обычного RSI ?

Верно? Но я не понимаю, какой период у этой SMA (наверное не Length)?

И после, если я правильно понял с линиями:

for (int k=0; k<3; k++)

{

int kk = k*2;

wrkBuffer[r][kk+0] = Kg*mom + Hg*wrkBuffer[r-1][kk+0];

wrkBuffer[r][kk+1] = Kg*wrkBuffer[r][kk+0] + Hg*wrkBuffer[r-1][kk+1];

mom = 1.5*wrkBuffer[r][kk+0] - 0.5 * wrkBuffer[r][kk+1];

Фактически он вычисляет 3 раза mom (один за другим), причем первое mom указано выше (mom = wrkBuffer[r][12]-wrkBuffer[r-1][12];).

Правильно ли это?

И после этого "классика" с RSX=((mom/moa)+1)*50

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

Хорошего дня

Zilliq

 
zilliq:
Привет MLaden и Mrtools,

Надеюсь, у вас все в порядке.

Мне нужно ваше подтверждение по поводу RSX.

Я вижу, что вы используете более простую формулу для расчета RSX:

__________________________

двойной Кг = (3.0)/(2.0+Длина);

double Hg = 1.0-Kg;

if (slope[limit]==-1) CleanPoint(limit,rsxDa,rsxDb);

if (ArrayRange(wrkBuffer,0) != Bars) ArrayResize(wrkBuffer,Bars);

for(i=limit, r=Bars-i-1; i>=0; i--, r++)

{

wrkBuffer[r][12] = iMA(NULL,0,1,0,MODE_SMA,Price,i);

if (i==(Bars-1)) { for (int c=0; c<12; c++) wrkBuffer[r][c] = 0; continue; }

//

//

//

//

//

double mom = wrkBuffer[r][12]-wrkBuffer[r-1][12];

double moa = MathAbs(mom);

for (int k=0; k<3; k++)

{

int kk = k*2;

wrkBuffer[r][kk+0] = Kg*mom + Hg*wrkBuffer[r-1][kk+0];

wrkBuffer[r][kk+1] = Kg*wrkBuffer[r][kk+0] + Hg*wrkBuffer[r-1][kk+1]; mom = 1.5*wrkBuffer[r][kk+0] - 0.5 * wrkBuffer[r][kk+1];

wrkBuffer[r][kk+6] = Kg*moa + Hg*wrkBuffer[r-1][kk+6];

wrkBuffer[r][kk+7] = Kg*wrkBuffer[r][kk+6] + Hg*wrkBuffer[r-1][kk+7]; moa = 1.5*wrkBuffer[r][kk+6] - 0.5 * wrkBuffer[r][kk+7];

}

if (moa != 0)

rsx = MathMax(MathMin((mom/moa+1.0)*50.0,100.00),0.00);

else rsx = 50;

____________________________________

Просто для того, чтобы убедиться, что вы понимаете, как RSX рассчитывается с помощью этой формулы.

Сначала со строкой:

mom = wrkBuffer[r][12]-wrkBuffer[r-1][12];

на самом деле wrkBuffer[r][12] - это простое скользящее среднее цены, обратите внимание на цену, как у обычного RSI ?

Верно? Но я не понимаю, какой период у этой SMA (наверное не Length)?

И после, если я правильно понял с линиями:

for (int k=0; k<3; k++)

{

int kk = k*2;

wrkBuffer[r][kk+0] = Kg*mom + Hg*wrkBuffer[r-1][kk+0];

wrkBuffer[r][kk+1] = Kg*wrkBuffer[r][kk+0] + Hg*wrkBuffer[r-1][kk+1];

mom = 1.5*wrkBuffer[r][kk+0] - 0.5 * wrkBuffer[r][kk+1];

Фактически он вычисляет 3 раза mom (один за другим), причем первое mom указано выше (mom = wrkBuffer[r][12]-wrkBuffer[r-1][12];).

Правильно ли это?

И после этого "классика" с RSX=((mom/moa)+1)*50

Спасибо за следующий ответ, как кодер (на другой платформе), вы знаете, я люблю понимать, как работают коды.

Хорошего дня

Zilliq

"На самом деле wrkBuffer[r][12] - это простая скользящая средняя от цены, обратите внимание на прицип как у обычного RSI ?"

Нет. Расчетный период для этой средней равен 1, что означает, что он равен цене используемой "средней". В metatader это самый быстрый способ получить желаемую цену (если вы попробуете написать структуру "case", делающую то же самое, вы увидите, что это намного медленнее, чем способ, используемый в коде rsx).

"На самом деле он вычисляет 3 раза маму (одну за другой), причем первая мама выше".

Нет. Посмотрите, какие значения он использует в каждой новой итерации. mom и moa постоянно меняются и повторно используются (в этой измененной форме) в процессе цикла.

 

Спасибо большое Младен,

Это очень странно, если я правильно понял wrkBuffer[r][12] равен цене, но вы используете скользящее среднее с периодом 1 для ускорения расчета. Это так любопытно...

Что касается второй вещи, я думаю/предполагаю, что это то, что я пытаюсь сказать

он рассчитывает маму как импульс цены.

И вычисляет другую маму с Kg и Hg. Дает новый мап, который привык создавать новый мап, и так далее, 3 раза

Что-то "проще" (для облегчения понимания), как это

мама

мама1=кг*мама

мама2=кг*мама1

мама3=кг*мама2

А в конце используется мама3 и моа3.

Я прав?

 
zilliq:
Спасибо большое, Младен,

Это очень странно, если я правильно понял wrkBuffer[r][12] равен цене, но вы используете скользящее среднее с периодом 1 для ускорения расчета. Это так любопытно...

Что касается второй вещи, я думаю/предполагаю, что это то, что я пытаюсь сказать

он рассчитывает маму как импульс цены.

И вычисляет другую маму с Kg и Hg. Дает новый мап, который привык создавать новый мап, и так далее, 3 раза

Что-то "проще" (для облегчения понимания), как это

мама

мама1=кг*мама

мама2=кг*мама1

мама3=кг*мама2

А в конце используется мама3, и моа3.

Я прав?

Зиллик,

да, именно так это и делается

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