Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
dasio
Попробуйте что-нибудь подобное:
#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
Привет всем. Ищу быструю помощь в написании строки кода для сигнала.
Я использую Step_Indy и пересечение EMA для сигнала. Я хочу, чтобы советник входил в сделку только тогда, когда оба сигнала подают сигнал в пределах 10 баров друг от друга.
То есть, скажем, Step дает сигнал, я хочу, чтобы советник посмотрел на 10 баров назад, чтобы увидеть, было ли пересечение MA, если да, то войти. (Заметьте, я не хочу, чтобы он просто проверял и смотрел, является ли текущий сигнал пересечения МА длинным, я хочу, чтобы он был недавним, например, в пределах 10 баров).
TIA за любую помощь, я не думаю, что видел это в прошлом в советниках, которые я рассматривал.
dasio
Из кода я не могу понять, каково намерение кода. В любом случае, вот код, в котором вы можете выбрать, хотите ли вы использовать истинный диапазон в качестве "основного" значения индикатора (это первая часть вашего кода) или вы хотите использовать вторую часть вашего кода в качестве "основного" значения.
Mladen Я пытался, но безуспешно.
Во вложении пример моего индикатора. Отличия только в расчетах, но в остальном все то же самое.
Не могли бы вы приложить вашу формулу, чтобы я мог ее изучить.
Спасибо
test1.mq4Проблемы с сигналами
Младен, спасибо еще раз, алерт больше не повторяется, работает отлично..... но я хочу поставить стоп 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());
}
Попробуйте вот так:
{
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());
}
}dasio Из кода я не могу понять, каково намерение кода. В любом случае, вот код, в котором вы можете выбрать, хотите ли вы использовать истинный диапазон в качестве "основного" значения индикатора (это первая часть вашего кода) или вы хотите использовать вторую часть вашего кода в качестве "основного" значения
Спасибо, Младен.
Я знаю, что рассчитывать таким образом нет смысла. Но я пытаюсь закодировать анализ, который я делаю каждый день. ^^
Это только 1/3 часть работы.
Спасибо
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" - это всегда тиковый объем.
Я хочу запросить объем каждого бара, но я понятия не имею, как это сделать. Я новичок в программировании 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);
}Привет всем. Ищу быструю помощь, чтобы написать строчку кода для сигнала.
Я использую 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() в цикл, а затем протестировать это значение. Что-то вроде этого:
{
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);
}
Я попробовал несколько способов, но пока ничего не сработало.
Вот один из способов, который я пробовал:
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);
}
Любые идеи приветствуются