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

 

Другой вопрос

сейчас мой советник выглядит следующим образом

if(FastMA2 SlowMA1)

{

ClosePositions();

OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-SLpips*Point,Ask+(45*Point),"",MAGIC,0,Blue);

return(0);

Я хочу изменить следующим образом

1. На 15минутном таймфрейме появляется знак покупки

2. если на 5минутном таймфрейме MA пересекается со знаком покупки, то тоже.

ClosePosition. и получить новую позицию

если на 5минут таймфлейм МА изменяется, то уже есть знак продажи

подождите 5минут, чтобы сменить знак покупки,

то ClosePosition. и получаем новую позицию

Пожалуйста, подскажите, как написать эту программу.

 
Файлы:
 

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

Я ищу некоторую помощь У меня есть советник, который я использую на демо, а также учусь кодировать. Я пытаюсь понять, как добавить комментарий к системе, чтобы показать мне, какой из 4 критериев входа был использован для открытия позиции. например, если был использован long2, то показать сигнал long2.

Любая помощь была бы очень кстати.

спасибо

Бено

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

Мне нужна помощь. У меня есть советник, который я использую на демо, а также учусь кодировать. Я пытаюсь понять, как добавить комментарий к системе, чтобы показать мне, какой из 4 критериев входа был использован для открытия позиции. например, если был использован long2, то показать сигнал long2.

Любая помощь была бы очень кстати.

спасибо

Бено

После выполнения условия и использования команды Ordersend() просто вставьте оператор Comment(), Alert() или Print(). В зависимости от того, что вы хотите использовать.

Что-то вроде этого:

if ( long2 == true)

{

Ordersend();

{

Print(" Сигнал long2 принят ");

}

}

Надеюсь, это поможет.

 

Спасибо, Вульф.

Я должен был посмеяться, я вставил то, что вы предложили, и это вроде как сработало, но теперь у меня только комментарий и никаких открывающихся позиций. любые подсказки

bool Long = MAofRSI11>MAofRSI21 && MAofRSI12VolHL && RSIndex1HL2 && TrStop0.0 && SDLL && ma<Close[shift];

bool Short = MAofRSI11=MAofRSI22 && VolCH>VolHL && RSIndex1HLM && TrStop>Close[shift] && MOMClose[shift];

bool Long2 = MAofRSI11>HLM && MAofRSI12HLM && MAofRSI22VolHL && TrStop0.0 && SDLL && ma<Close[shift];

bool Short2 = MAofRSI11=HLM && MAofRSI21=HLM && VolCH>VolHL && TrStop>Close[shift] && MOMClose[shift];

bool Long3 = RSIndex1-RSIndex2>20<HL2 && TrStop0.0 && SDLL && ma<Close[shift];

bool Short3 = RSIndex2-RSIndex1>20>HL1 && TrStop>Close[shift] && MOMClose[shift];

bool Long4 = zscore>0.0 && ma<Close[shift];

bool Short4 = zscoreClose[shift];

buysig = Long || Long2 || Long3 || Long4;

sellsig = Short || Short2 || Short3 || Short4;

closebuy=sellsig;

closesell=buysig;

if (curprof>=AccountBalance()*ProfitExit/100.0) {

exit=true;

}

if (last>0 && (Time[0]-last)/(Period()*60)>=CancelOrderBars) {

remorder=true;

}

}

void CheckForOpen() {

int res,tr;

//---- условия продажи

co=CalculateCurrentOrders(Symbol());

if(sellsig && lastsig!=-1) {

co=CalculateCurrentOrders(Symbol());

if (co==0) {

if ( Short == true)

if ( Short2 == true)

if ( Short3 == true)

res = OpenStop(OP_SELLSTOP,LotsRisk(StopLoss), Low[shift]-OrderPipsDiff*Point, StopLoss, TakeProfit1);

Print(" Взят сигнал Short ");

Print(" Взят сигнал Short2 ");

Print(" Взят сигнал Short3 ");

Print(" Взят сигнал Short4 ");

}

lastsig=-1;

last=Time[0];

return;

}

//---- условия покупки

if(buysig && lastsig!=1) {

co=CalculateCurrentOrders(Symbol());

if (co==0) {

if ( Long == true)

if ( Long2 == true)

if ( Long3 == true)

if ( Long4 == true)

res = OpenStop(OP_BUYSTOP,LotsRisk(StopLoss), High[shift]+OrderPipsDiff*Point, StopLoss, TakeProfit1);

Print(" Длинный сигнал взят ");

Print(" Длинный2 сигнал взят ");

Print(" Взят сигнал Long3 ");

Print(" Взят сигнал Long4 ");

}

last=Time[0];

lastsig=1;

return;

}

}

Исправлено Спасибо

 

Отладочный код

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

extern bool DEBUGGING = true

...

if(DEBUGGING && variableName == 0) Print("CodePoint 1 -- This variable is now ", variableName);

... еще код

if(DEBUGGING && variableName == 0) Print("CodePoint 2 -- This variable is now ", variableName);

... еще код

if(DEBUGGING && variableName == 0) Print("CodePoint 3 -- This variable is now ", variableName);

...

 

не могли бы вы мне помочь, почему в коде много ошибок?

это для расчета SMMA:

for(j=0;j<Bars;j++)

{

for(i=0,sum=0;i<ma_period;i++)

{

sum=sum+Close[j+i];

// buffer[j]=(sum-sum/ma_period+Close[j+i])/ma_period;

}

buffer[j]=(sum-sum/ma_period+Close[j])/ma_period;

}

это для расчета LWMA

for(j=0;j<Bars;j++)

{

for(i=0,sum=0,sum1=0;i<ma_period;i++)

{

sum=sum+Close[j+i];

sum1=sum1+Close[j+i]*(j+i);

// buffer[j]=sum/ma_period;

}

buffer[j]=sum1/sum;

}

и как рассчитать EMA?

 

вопрос по индикаторам

Привет всем.

Я застрял на вопросе программирования. Кто-нибудь знает, как использовать результат одного индикатора для изменения другой настройки? Например, если дневной стокасти был выше 20, я бы хотел, чтобы скользящая средняя была равна (x). Я пытался заставить работать приведенный ниже код, но безрезультатно. Я не могу заставить работать команду switch или if else.

double fourhrUP;

double daystoch1 = iStochastic(NULL, PERIOD_D1,5, 3, 3, MODE_SMA, 0, MODE_MAIN,1);

double daystoch20 = 20;

if (daystoch1 > daystoch20) four_hrUP = 5 ;

double iMA( string symbol, int timeframe,four_hrUP, int ma_shift, int ma_method, int applied_price, int shift)

 
ajk:
Привет всем.

Я застрял на вопросе программирования. Кто-нибудь знает, как использовать результат одного индикатора для изменения другой настройки? Например, если дневной стокасти был выше 20, я бы хотел, чтобы скользящая средняя была равна (x). Я пытался заставить работать приведенный ниже код, но безрезультатно. Я не могу заставить работать команду switch или if else.

double fourhrUP;

double daystoch1 = iStochastic(NULL, PERIOD_D1,5, 3, 3, MODE_SMA, 0, MODE_MAIN,1);

double daystoch20 = 20;

if (daystoch1 > daystoch20) four_hrUP = 5 ;

double iMA( string symbol, int timeframe,four_hrUP, int ma_shift, int ma_method, int applied_price, int shift)

Где находится переменная вашего MA?

Возможно, это может помочь

double ma4hr=iMA( string symbol, int timeframe,four_hrUP, int ma_shift, int ma_method, int applied_price, int shift);

если расчет стоха происходит в том же цикле, скажем, "for(int shift=limit-1; shift>=0; shift--)", то код стоха должен быть следующим

double daystoch1 = iStochastic(NULL, PERIOD_D1,5, 3, 3, MODE_SMA, 0, MODE_MAIN,shift+1);

CMIIW

 

Небольшая помощь с индикатором - Кодеры, пожалуйста, посмотрите

Я тестирую платформу брокера MT4, которая использует дробные пипсы (пипетки) в котировках цен: Например, на EURJPY они котируют 164.381 вместо 164.38 - Это означает, что спред имеет десятичную дробь 4.1 пипса (вместо 4).

Может ли кто-нибудь подсказать мне, как изменить следующий код, чтобы спред отображался правильно? Сейчас спред в 4,1 пункта будет отображаться в индикаторе как 41,0. Любая помощь будет принята с благодарностью.

Дэн

//---- спред

Spread=NormalizeDouble((Ask-Bid)/Point,1);

ObjectSetText("Spread Monitor1", "Spread:", 10, "Arial", labelColor);

ObjectSetText("Spread Monitor2",DoubleToStr(Spread,1),10, "Arial", clockColor);