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

 
mladen:
dasio

Попробуйте что-нибудь подобное:

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 OrangeRed

#property indicator_color2 Silver

#property indicator_width1 2

extern int RsiPeriod = 50;

extern int RsiPrice = PRICE_CLOSE;

double work[];

double avg[];

//------------------------------------------------------------------

//

//------------------------------------------------------------------

//

//

//

//

//

int init()

{

SetIndexBuffer(0,work);

SetIndexBuffer(1,avg);

return(0);

}

int start()

{

int i,countedBars = IndicatorCounted();

if (countedBars<0) return(-1);

if (countedBars>0) countedBars--;

int limit = MathMin(Bars-countedBars,Bars-1);

for(i=limit; i>=0; i--)

{

work = iRSI(NULL,0,RsiPeriod,RsiPrice,i);

int y = iBarShift(NULL,PERIOD_D1,Time);

int x = iBarShift(NULL,PERIOD_D1,Time);

if (x!=y)

{

int k = iBarShift(NULL,0,iTime(NULL,PERIOD_D1,y));

double average = work[k];

int c = 1;

for (int j=k-1; j>=i; j--,c++) average += work[j]; average /= c;

for ( j=k ; j>=i; j--) avg[j] = average;

}

}

return(0);

}

Младен, я пробовал, но безуспешно.

Во вложении пример моего индикатора. Разница только в расчетах, но в остальном все то же самое.

Не могли бы вы приложить вашу формулу, чтобы я тоже мог ее изучить.

Спасибо

test1.mq4

Файлы:
test1.mq4  3 kb
 

Привет всем. Ищу быструю помощь в написании строки кода для сигнала.

Я использую Step_Indy и пересечение EMA для сигнала. Я хочу, чтобы советник входил в сделку только тогда, когда оба сигнала подают сигнал в пределах 10 баров друг от друга.

То есть, скажем, Step дает сигнал, я хочу, чтобы советник посмотрел на 10 баров назад, чтобы увидеть, было ли пересечение MA, если да, то войти. (Заметьте, я не хочу, чтобы он просто проверял и смотрел, является ли текущий сигнал пересечения МА длинным, я хочу, чтобы он был недавним, например, в пределах 10 баров).

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

 

dasio

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

dasio:
Mladen Я пытался, но безуспешно.

Во вложении пример моего индикатора. Отличия только в расчетах, но в остальном все то же самое.

Не могли бы вы приложить вашу формулу, чтобы я мог ее изучить.

Спасибо

test1.mq4
Файлы:
_test1.mq4  2 kb
 

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

Младен, спасибо еще раз, алерт больше не повторяется, работает отлично..... но я хочу поставить стоп sgnal..... и я написал следующий код, сигнал покупки и продажи работает, но стоп покупки и стоп продажи не работает, см. код ниже:

//-----Присвоение алартов----

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);

// Торговые оповещения

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

{

lastAlerted=Time[0];

Alert("Buy","\n","Текущее время ",TimeToStr(CurTime()),"\n",Symbol());

}

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

{

lastAlerted=Time[0];

Alert("Sell","\n", "Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

// Остановить оповещения

if((adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_mainRSIP2)&&(nowenCCI>0&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)||(adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_main>ist_signal)&&(RSIP10&&nowenCCI>b4enCCI)&&(nowtrCCI>0&&nowtrCCI>b4trCCI)||(adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI<0&&nowenCCI0&&nowtrCCI>b4trCCI)||(adx_h4>=20)&&(di_p_h4>=20)&&(di_p_h4>di_m_h4)&&(ist_main>ist_signal)&&(RSIP1>RSIP2)&&(nowenCCI>0&&nowenCCI>b4enCCI)&&(nowtrCCI<0&&nowtrCCI<b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0];

Alert("Stop Buy","\n", "Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

if((adx_h4>=20)&&(di_m_h4>=20)&&(di_p_h4ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI=20)&&(di_m_h4>=20)&&(di_p_h4<di_m_h4)&&(ist_mainRSIP2)&&(nowenCCI<0&&nowenCCI<b4enCCI)&&(nowtrCCI<0&&nowtrCCI=20)&&(di_m_h4>=20)&&(di_p_h4<di_m_h4)&&(ist_main<ist_signal)&&(RSIP10&&nowenCCI>b4enCCI)&&(nowtrCCI<0&&nowtrCCI=20)&&(di_m_h4>=20)&&(di_p_h4<di_m_h4)&&(ist_main<ist_signal)&&(RSIP1<RSIP2)&&(nowenCCI<0&&nowenCCI0&&nowtrCCI>b4trCCI)&&(lastAlerted!=Time[0]))

{

lastAlerted=Time[0];

Alert(" Stop Sell","\n", "Current time is ",TimeToStr(CurTime()),"\n",Symbol());

}

mladen:
Попробуйте вот так:
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());

}

}
 
mladen:
dasio Из кода я не могу понять, каково намерение кода. В любом случае, вот код, в котором вы можете выбрать, хотите ли вы использовать истинный диапазон в качестве "основного" значения индикатора (это первая часть вашего кода) или вы хотите использовать вторую часть вашего кода в качестве "основного" значения

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

Я знаю, что рассчитывать таким образом нет смысла. Но я пытаюсь закодировать анализ, который я делаю каждый день. ^^

Это только 1/3 часть работы.

Спасибо

 
mladen:
dasio Из кода я не могу понять, каково намерение кода. В любом случае, вот код, в котором вы можете выбрать, хотите ли вы использовать истинный диапазон в качестве "основного" значения индикатора (это первая часть вашего кода) или вы хотите использовать вторую часть вашего кода в качестве "основного" значения

Спасибо, это идеально.

Возможно ли добавить пятничное исправление?

Спасибо.

С уважением,

 

Объем

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

//--- входные параметры

extern double TakeProfit = 4;

extern double StopLoss = 20;

extern double Lots = 0.1;

extern double TrailingStop = 30;

extern double volumemore = 600;

extern double volumeless = 150;

//+------------------------------------------------------------------+

//| функция инициализации эксперта |

//+------------------------------------------------------------------+

int start()

{

if (Volume=>volumemore)

{

Print ("объем больше")

{

if (Volume=<volumeless)

{

Print ("объем меньше");

if (Bars<20)

{

Print("баров меньше 20");

{

//----

//----

return (0);

}

 

Используйте Volume, где "index" - это номер бара, для которого вы хотите увидеть объем. Помните, что в metatrader 4 "Volume" - это всегда тиковый объем.

Tim Latham:
Я хочу запросить объем каждого бара, но я понятия не имею, как это сделать. Я новичок в программировании mql4, но пытаюсь научиться. Я попробовал эту простую программу, но это может быть полная чушь, пожалуйста, дайте мне знать, и любые предложения будут приняты с благодарностью. Ниже приведено начало скрипта для запроса объема бара, затем вывести результат, пожалуйста, дайте мне знать, где я иду неправильно.

//--- входные параметры

extern double TakeProfit = 4;

extern double StopLoss = 20;

extern double Lots = 0.1;

extern double TrailingStop = 30;

extern double volumemore = 600;

extern double volumeless = 150;

//+------------------------------------------------------------------+

//| функция инициализации эксперта |

//+------------------------------------------------------------------+

int start()

{

if (Volume=>volumemore)

{

Print ("объем больше")

{

if (Volume=<volumeless)

{

Print ("объем меньше");

if (Bars<20)

{

Print("баров меньше 20");

{

//----

//----

return (0);

}
 
jayjonbeach:
Привет всем. Ищу быструю помощь, чтобы написать строчку кода для сигнала.

Я использую Step_Indy и пересечение EMA для сигнала. Я хочу, чтобы советник входил в сделку только тогда, когда оба дают сигнал в пределах 10 баров друг от друга.

То есть, скажем, Step дает сигнал, я хочу, чтобы советник посмотрел на 10 баров назад, чтобы увидеть, было ли пересечение MA, если да, то войти. (Обратите внимание, я не хочу, чтобы он просто проверял и смотрел, длинный ли текущий сигнал пересечения МА, я хочу, чтобы он был недавним, например, в пределах 10 баров).

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

Я попробовал несколько вариантов, но пока ничего не сработало.

Вот один из способов, который я пробовал:

extern int lookback = 10;

extern int EMA1 = 21;

extern int EMA2 = 55;

int GetEntrySignal()

{

int trendCurr = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest );

int trendPrev = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest+1);

double TwentyOneEMA = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,1);

double FiftyFiveEMA = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,1);

if(TwentyOneEMA > FiftyFiveEMA)

{

if (trendCurr>0)

{

for(int i=1; i<=Bars-lookback; i++)

{

if (trendCurr<0)

return(LONG);

else return(NONE);

}

}

}

if(TwentyOneEMA < FiftyFiveEMA)

{

if (trendCurr<0)

{

for(int i2=1; i2<=Bars-lookback; i2++)

{

if (trendCurr>0)

return(SHORT);

else return(NONE);

}

}

}

return(NONE);

}

Любые идеи приветствуются, я также пробовал (int i=1; i<=lookback; i++)

 

...

jayjonbeach,

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

Попробуйте поместить iCustom() в цикл, а затем протестировать это значение. Что-то вроде этого:

if (trendCurr>0)

{

for(int i=1; i<=lookback; i++)

{

int testValue = iCustom(NULL,StepMaTimeFrame,"StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest+i);

if (testValue<0) return(LONG);

}

return(NONE);

}

jayjonbeach:
Я попробовал несколько способов, но пока ничего не сработало.

Вот один из способов, который я пробовал:

extern int lookback = 10;

extern int EMA1 = 21;

extern int EMA2 = 55;

int GetEntrySignal()

{

int trendCurr = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest);

int trendPrev = iCustom(NULL,StepMaTimeFrame, "StepMA_v7",Length,Kv,StepSize,MA_Mode,Advance,Percentage,UpDownShift,HighLow,ColorMode,5,StepMaBarToTest+1);

double TwentyOneEMA = iMA(NULL,0,EMA1,0,MODE_EMA,PRICE_CLOSE,1);

double FiftyFiveEMA = iMA(NULL,0,EMA2,0,MODE_EMA,PRICE_CLOSE,1);

if(TwentyOneEMA > FiftyFiveEMA)

{

if (trendCurr>0)

{

for(int i=1; i<=Bars-lookback; i++)

{

if (trendCurr<0)

return(LONG);

else return(NONE);

}

}

}

if(TwentyOneEMA < FiftyFiveEMA)

{

if (trendCurr<0)

{

for(int i2=1; i2<=Bars-lookback; i2++)

{

if (trendCurr>0)

return(SHORT);

else return(NONE);

}

}

}

return(NONE);

}

Любые идеи приветствуются