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

 

Нужна помощь

................

 
SIDDESH:
Привет,

Приведите, пожалуйста, код для предыдущего бара.

Это может быть использовано в советнике для ограничения выставления ордеров, когда предыдущий бар больше определенной высоты.

С уважением,

SIDDESH

Сиддеш и другие, кто может помочь:

Код для предыдущего бара приведен ниже:

//на покупку

double indicatorpast = icustom(....................,1);

double indicatornow = icustom(....................,0);

if (close[1]indicatornow) OpenBUY();

if (close[1]>indicatorpast && close[0]<indicatornow) OpenSELL();

но при таком подходе эксперт открывает позиции не только когда цена пересекает индикатор, он открывает позицию и выше индикатора. Я хочу, чтобы эксперт открывал позицию ТОЛЬКО при пересечении индикатора, поэтому я попробовал так:

//на покупку

double indicatorpast = icustom(....................,1);

double indicatornow = icustom(....................,0);

if (close[1]<indicatorpast && close[0]==indicatornow) OpenBUY();

if (close[1]>indicatorpast && close[0]==indicatornow) OpenSELL();

Но это утверждение не выполняется.

Вы знаете, что происходит? Потому что я думаю, что в этом утверждении нет ошибок.

Вопрос в том, почему не происходит открытие в точной точке пересечения, когда close[0]==Indicatornow? Если бы функция была с ==, мы бы предотвратили открытие ордеров выше точки пересечения между индикатором и закрытием текущего бара, но функция не работает с таким типом связи между переменными.

 

Люди, которые могут помочь:

Ниже приведен код для предыдущего бара:

//на покупку

double indicatorpast = icustom(....................,1);

double indicatornow = icustom(....................,0);

if (close[1]indicatornow) OpenBUY();

if (close[1]>indicatorpast && close[0]<indicatornow) OpenSELL();

но при таком подходе эксперт открывает позиции не только когда цена пересекает индикатор, он открывает позицию и выше индикатора. Я хочу, чтобы эксперт открывал позицию ТОЛЬКО при пересечении индикатора, поэтому я попробовал так:

//на покупку

double indicatorpast = icustom(....................,1);

double indicatornow = icustom(....................,0);

if (close[1]<indicatorpast && close[0]==indicatornow) OpenBUY();

if (close[1]>indicatorpast && close[0]==indicatornow) OpenSELL();

Но это утверждение не выполняется.

Вы знаете, что происходит? Потому что я думаю, что в этом утверждении нет ошибок.

Вопрос в том, почему не происходит открытие в точной точке пересечения, когда close[0]==Indicatornow? Если бы функция была с ==, мы бы предотвратили открытие ордеров выше точки пересечения между индикатором и закрытием текущего бара, но функция не работает с таким типом связи между переменными.

Экспериментировали ли вы с такой же проблемой? Кто-нибудь знает, как ее решить?

Спасибо, еще раз.

 
la totona:
Люди, которые могут помочь:

Код для предыдущего бара приведен ниже:

//на покупку

double indicatorpast = icustom(....................,1);

double indicatornow = icustom(....................,0);

if (close[1]indicatornow) OpenBUY();

if (close[1]>indicatorpast && close[0]<indicatornow) OpenSELL();

но при таком подходе эксперт открывает позиции не только когда цена пересекает индикатор, он открывает позицию и выше индикатора. Я хочу, чтобы эксперт открывал позицию ТОЛЬКО при пересечении индикатора, поэтому я попробовал так:

//на покупку

double indicatorpast = icustom(....................,1);

double indicatornow = icustom(....................,0);

if (close[1]<indicatorpast && close[0]==indicatornow) OpenBUY();

if (close[1]>indicatorpast && close[0]==indicatornow) OpenSELL();

Но это утверждение не выполняется.

Вы знаете, что происходит? Потому что я думаю, что в этом утверждении нет ошибок.

Вопрос в том, почему не происходит открытие в точной точке пересечения, когда close[0]==Indicatornow? Если бы функция была с ==, мы бы предотвратили открытие ордеров выше точки пересечения между индикатором и закрытием текущего бара, но функция не работает с таким типом связи между переменными.

Экспериментировали ли вы с такой же проблемой? Кто-нибудь знает, как ее решить?

Спасибо, еще раз.

Потому что вы ищете точное соответствие между возвращаемым 8-значным значением с плавающей точкой и ценой - они почти никогда не будут равны с подобным разрешением. Просто проверьте условие "больше-меньше" или "меньше-меньше".

 

программное обеспечение для свитчинга

привет ребята, мне нужно перевести этот индикатор или торговую относительную систему на язык mql, потому что он работает на metatrader 4. Я меняю брокера и программное обеспечение, может ли кто-нибудь помочь мне?

{Расчет расширенной регрессионной скользящей средней}

{BEGINNING}

{"-HShift" - BARS FORWARDS}

DataBars:= Ref(Price,- HShift);

e1:= Mov(DataBars,PeriodMA,TypeMA);

e2:= Mov(e1,PeriodMA,TypeMA);

e3:= Mov(e2,PeriodMA,TypeMA);

e4:= Mov(e3,PeriodMA,TypeMA);

e5:= Mov(e4,PeriodMA,TypeMA);

e6:= Mov(e5,PeriodMA,TypeMA);

c1:= -b*b*b;

c2:= 3*b*b+3*b*b*b;

c3:= -6*b*b-3*b-3*b*b*b;

c4:= 1+3*b+b*b*b+3*b*b;

MV:= c1*e6+c2*e5+c3*e4+c4*e3;

{Расчет времени жизни MV

для устранения искажения начальных значений}

{T3 Moving Average}

e1:= Mov(Pr,PeriodMA1,TypeMA1);

e2:= Mov(e1,PeriodMA1,TypeMA1);

e3:= Mov(e2,PeriodMA1,TypeMA1);

e4:= Mov(e3,PeriodMA1,TypeMA1);

e5:= Mov(e4,PeriodMA1,TypeMA1);

e6:= Mov(e5,PeriodMA1,TypeMA1);

c1:= -b1*b1*b1;

c2:= 3*b1*b1+3*b1*b1*b1;

c3:= -6*b1*b1-3*b1-3*b1*b1*b1;

c4:= 1+3*b1+b1*b1*b1+3*b1*b1;

MA1:= c1*e6+c2*e5+c3*e4+c4*e3;

{Тренд вверх и вниз}

UpTrend:=Mv>=MA1;

DownTrend:=MA1>=Mv;

{Сигналы Long и Short}

Long:= cross(Mv,MA1) и Mv>=MA1;

Short:= cross(MA1,Mv) and MA1>=Mv;

{OpenBuy и CloseBuy}

OpenBuy:= cross(Mv,MA1) и Mv>=MA1;

CloseBuy:= cross(MA1,Mv) and MA1>=Mv;

{OpenSell и CloseSell}

OpenSell:= cross(MA1,Mv) и MA1>=Mv;

CloseSell:= cross(Mv,MA1) and Mv>=MA1;

 
bobo10:
привет ребята, мне нужно перевести этот индикатор или торговую относительную систему на язык mql, потому что он работает на metatrader 4. Я меняю брокера и программное обеспечение, может ли кто-нибудь помочь мне?

{T3 Moving Average}

e1:= Mov(Pr,PeriodMA1,TypeMA1);

e2:= Mov(e1,PeriodMA1,TypeMA1);

e3:= Mov(e2,PeriodMA1,TypeMA1);

e4:= Mov(e3,PeriodMA1,TypeMA1);

e5:= Mov(e4,PeriodMA1,TypeMA1);

e6:= Mov(e5,PeriodMA1,TypeMA1);

c1:= -b1*b1*b1;

c2:= 3*b1*b1+3*b1*b1*b1;

c3:= -6*b1*b1-3*b1-3*b1*b1*b1;

c4:= 1+3*b1+b1*b1*b1+3*b1*b1;

MA1:= c1*e6+c2*e5+c3*e4+c4*e3;

Все эти коды похожи, вы можете начать с кода T3

 
nittany1:
Global, поместите это перед init()
datetime PreviousBar;[/CODE]

In the order placement and/or order close stuff, wrap it in this:

if(NewBar() == true)

{

if blah blah blah, gimme pips // not actual functions but you get the idea

if blah blah blah, close orders // um

}

Common function outside main loop:

[CODE]//--- returns true if current bar just formed

bool NewBar()

{

if(PreviousBar<Time[0])

{

PreviousBar = Time[0];

return(true);

}

else

{

return(false);

}

return(false);

}

Спасибо nitty1 за помощь. Я попробую это.

Также спасибо waltini и devil2000. Теперь я должен разобраться с этим.

 

Код счета для работы на демо свободно

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

Может ли кто-нибудь подсказать мне, какой код можно вставить, чтобы советник, имеющий код безопасности счета, мог свободно работать на демо-счете, чтобы пользователи могли протестировать его перед запуском в реальном времени?

Возможно ли это вообще?

Спасибо

 
fxgrm:
Привет:

Может ли кто-нибудь подсказать мне, какой код можно вставить, чтобы советник, в котором есть код безопасности счета, мог свободно работать на демо-счете, чтобы пользователи могли протестировать его перед запуском в реальном времени?

Возможно ли это вообще?

Спасибо

Из метаредактора:

bool IsDemo()

Возвращает TRUE, если эксперт работает на демо-счете, иначе возвращает FALSE.

 

Кодирование "состояния тренда" с помощью StepMA

Условие покупки:

StepMA (с цветовым режимом: 2) является "длинным"

Стохастик пересекает отметку 20 снизу вверх

Условие продажи:

StepMA (с цветовым режимом: 2) - "короткая"

Стохастик пересекает 80 сверху вниз

double StochCurrent = iStochastic(NULL, 0, 21, 3, 8, MODE_SMA, 0, MODE_MAIN, Bar + 0);

double StochPrevious = iStochastic(NULL, 0, 21, 3, 8, MODE_SMA, 0, MODE_MAIN, Bar + 1);

double TrendLong = iCustom(NULL, 0, "stepma_v7ea", 1, 1.0, 0, 0, 0, 0.0, false, 2, 0, 1, Bar + 0);

double TrendShort = iCustom(NULL, 0, "stepma_v7ea", 1, 1.0, 0, 0, 0, 0.0, false, 2, 0, 2, Bar + 0);

Покупать, если:

TrendLong && StochCurrent > 20 && StochPrevious < 20

Продавать, если:

TrendShort && StochCurrent 80

Может ли кто-нибудь помочь мне с кодом "Trend Condition" в приведенном выше примере, он не работает. Я пытался вызвать буфер 1 и буфер 2 для длинного и короткого режима, но я не понимаю код этого индикатора. Заранее спасибо!

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