xac_bond пишет:
Всем, здравствуйте.
С Новым годом и Старым Новым годом!
Здоровья, благополучия и денежек побольше.
Для Юрича и всех:
Полагаю, что один индикатор очень сложно настроить
на все случаи.
Может использовать идею использования одновременно
(совместно в одном индикаторе) несколько индикаторов
(нескольких идей) и принимать решения при их одинаковых сигналах
или использовать весовые (вероятностные коэффициенты).
Подобная идея реализована в индикаторе MaRsi-Trigger.mq4
Текст индикатора ниже (подработан под себя, но идея оставлена):
/*
+
| MaRsi-Trigger.mq4 |
| Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. |
+
*/
// по мотивам (сделан из) Trinity-Impulse из CodeBase mql4.com
// автор Trinity-Impulse: Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
// ??? Сделать: добавить сигналы с 4часа и Daily
// со старших ТФ еще и с весами???
// ??? добавить PriceAction-тренд и сигнал от регрессии
#property copyright "Copyright © 2016, Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра."
//----
#property indicator_separate_window
//----
#property indicator_buffers 1
#property indicator_color1 Yellow
//----
extern int nPeriodRsi = 590;
extern int nPeriodRsiLong = 718;
extern int nPeriodMa = 624;
extern int nPeriodMaLong = 491;
//extern int nPeriodADX = 8;
//extern int nLevelADX = 21;
//extern int SetPorog = 0; // ТАК БЫЛО В ИСХОДНОМ КОДЕ //меняем >0 только, если добавить сигналы от Cci, St, MACD, ...
int SetPorog = 0;
//----
double c[];
double iCF[];
//+
+
int init()
{
string short_name;
IndicatorBuffers(2);
SetIndexStyle(0, DRAW_LINE);
SetIndexBuffer(0, iCF);
SetIndexBuffer(1, c);
short_name = "MaRsi-Trigger("+nPeriodMa+"/"+nPeriodMaLong+";"+nPeriodRsi+"/"+nPeriodRsiLong+")";
IndicatorShortName(short_name);
SetIndexLabel(0, short_name);
SetIndexDrawBegin(0, nPeriodRsi);
return(0);
}
//+
+
int start()
{
int counted_bars = IndicatorCounted();
int j, iPorog;
// int kfADX = 1;
j = Bars - nPeriodRsi - 1;
if(counted_bars >= nPeriodRsi) j = Bars - counted_bars - 1;
// защита порога (не более числа сигналов)
iPorog=SetPorog; // если появятся внутренние мотивы изменения
if (SetPorog > 2) iPorog = 0;
while(j >= 0)
{
// Ma
if (iMA(NULL,0,nPeriodMa,0,MODE_EMA,PRICE_CLOSE,j) > iMA(NULL,0,nPeriodMaLong,0,MODE_EMA,PRICE_CLOSE,j)) c[j] = 1;
if (iMA(NULL,0,nPeriodMa,0,MODE_EMA,PRICE_CLOSE,j) < iMA(NULL,0,nPeriodMaLong,0,MODE_EMA,PRICE_CLOSE,j)) c[j] = -1;
// Rsi
if (iRSI(NULL,0,nPeriodRsi,PRICE_WEIGHTED,j) > iRSI(NULL,0,nPeriodRsiLong,PRICE_MEDIAN,j)) c[j] = c[j] + 1;
if (iRSI(NULL,0,nPeriodRsi,PRICE_WEIGHTED,j) < iRSI(NULL,0,nPeriodRsiLong,PRICE_MEDIAN,j)) c[j] = c[j] - 1;
// нормируем сигнал??? если сигналов больше 2-х
// if (c[j] > 0) c[j] = 1;
// if (c[j] < 0) c[j] = -1;
// if (iADX(NULL,0,nPeriodADX,PRICE_WEIGHTED,MODE_MAIN,j) > nLevelADX) kfADX = 1;
// else kfADX = 0;
iCF[j] = 0;
if(c[j] > iPorog)
{
iCF[j] = 1;
}
if(c[j] < -1*iPorog) // ??? -1*iPorog если сигналов>2 и порог не 0
{
iCF[j] = -1;
}
// iCF[j] = iCF[j]*kfADX;
j--;
}
return(0);
}
//+
+
да мы только за! впишите, код буля открыт!