Мультитаймфреймовые индикаторы - страница 405

 

объединение таймфреймов TDI

Привет, ребята, привет, Младен,

Поскольку некоторые из вас используют TDI в качестве поставщика сигналов, я столкнулся с системой оповещения TDI, как показано ниже (я просто подаю сигнал или даже оповещаю по электронной почте, когда происходит пересечение TDI). Вероятно, в этом нет ничего нового. Поскольку более безопасно торговать TDI как минимум на двух таймфреймах (60мин как основа, 5мин для скальпинга), я спрашиваю, возможно ли следующее:То, что я хочу, это объединить сигналы как минимум двух разных таймфреймов, чтобы дать мне в целом более надежный сигнал: Больший таймфрейм используется как основа, повышение или понижение задает направление для меньшего(их). Если тот же сигнал появляется на меньшем таймфрейме, это сделка; выход из сделки осуществляется только по сигналу выхода в зависимости от меньшего таймфрейма.

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

 
Jonny473:
Привет, ребята, привет Младен,

Поскольку некоторые из вас используют TDI в качестве поставщика сигналов, я наткнулся на систему TDI Alert System, как показано ниже (я просто подаю сигнал или даже EMail Alert, когда происходит пересечение TDI). Вероятно, в этом нет ничего нового. Поскольку более безопасно торговать TDI как минимум на двух таймфреймах (60мин как основа, 5мин для скальпинга), я спрашиваю, возможно ли следующее:То, что я хочу, это объединить сигналы как минимум двух разных таймфреймов, чтобы дать мне в целом более надежный сигнал: Больший таймфрейм используется как основа, повышение или понижение задает направление для меньшего(их). Если тот же сигнал появляется на меньшем таймфрейме, это сделка; сделка завершается только по сигналу выхода в зависимости от меньшего таймфрейма.

Вот индикатор, о котором я говорю, создавая сигналы; что вы думаете, ребята, или что-то подобное уже было опубликовано?

Индикатор будет выложен через секунду...

 
mladen:
FxTrendsTrader Вот, пожалуйста

Уважаемый Младен

Не могли бы Вы добавить в этот индикатор "Раскраску по наклону".

Заранее спасибо

секретный код

 
Jonny473:
Выложу индикатор через секунду...

Сердечный приступ....?...

 
fxnewbie:
Сердечный приступ....?...

Нет, никакого сердечного приступа: Вот код, просто скопируйте его и создайте индикатор, не могу найти файл

/*------------------------------------------------------------------------------------

Название: xTDI-Arrow.mq4

Copyright ?2010, Xaphod, Forex Whiz

Описание: - Рисует стрелки для кроссов TDI.

- Предоставляет предупреждения при пересечении вышеуказанных трех линий.

Журнал изменений:

2010-10-19. Xaphod, v1.00

- Первоначальный релиз

-------------------------------------------------------------------------------------*/

// Свойства индикатора

#property copyright "Copyright ? 2010, Xaphod"

#property link "http://forexwhiz.appspot.com"

#property indicator_chart_window

#property indicator_buffers 4

#property indicator_color1 LimeGreen

#property indicator_color2 Red

#property indicator_color3 Green

#property indicator_color4 FireBrick

#property indicator_width1 1

#property indicator_width2 1

#property indicator_width3 1

#property indicator_width4 1

#property indicator_maximum 1

#property indicator_minimum 0

// Постоянные определения

#define INDICATOR_NAME "xTDI-Arrow"

#define INDICATOR_VERSION "v1.00"

#define BAR_HEIGHT 1.00

#define TDI_INDI "Traders_Dynamic_Index"

#define ARROW_THIN_UP 225

#define ARROW_THIN_DN 226

#define ARROW_THICK_UP 233

#define ARROW_THICK_DN 234

#define ARROW_HOLLOW_UP 241

#define ARROW_HOLLOW_DN 242

#define ARROW_ROUND_UP 221

#define ARROW_ROUND_DN 222

// Параметры индикатора

extern string Indi.Copyright= "?2010, forexwhiz.appspot.com";

extern string Indi.Version= INDICATOR_VERSION;

extern string Show.Settings= "????????????????????????????????????";

extern int Show.TimeFrame=0; // Используемый таймфрейм. Текущий таймфрейм=0.

extern bool Show.MarketBaseLine=true; // Показывать крест выше/ниже базовой линии рынка другим цветом.

extern int Show.ArrowType=0; // 0=тонкая, 1=толстая, 2=полая, 3=круглая

extern int Show.ArrowSize=1; // Размер стрелки (1-5)

extern int Show.ArrowOffset=10; // Смещение от конца свечи для отображения стрелки

extern string TDI.Settings="????????????????????????????????????";

extern int TDI.RSIPeriod = 13; // Период. Рекомендуемые значения: 8-25

extern int TDI.RSIPrice = 0; // 0=CLOSE, 1=OPEN, 2=HIGH, 3=LOW, 4=MEDIAN, 5=TYPICAL, 6=WEIGHTED

extern int TDI.VolatilityBand = 34; // Рекомендуемые значения: 20-40

extern int TDI.RSIPriceLine = 2; // Период

extern int TDI.RSIPriceType = 0; // 0=SMA, 1=EMA, 2=SSMA, 3=LWMA

extern int TDI.TradeSignalLine = 7; // Период

extern int TDI.TradeSignalType = 0; // 0=SMA, 1=EMA, 2=SSMA, 3=LWMA

extern string Alert.Settings = "????????????????????????????????????";

extern bool Alert.RSIPriceLine=true; // Предупреждение, если цена RSI пересекает сигнальную линию. Зеленый цвет пересекает красный.

extern bool Alert.MarketBaseLine=true; // Оповещение, если цена RSI пересекает сигнальную линию и базовую линию рынка. Зеленый пересекает красный и желтый

extern bool Alert.NewBarOnly=true; // True=Оповещение при открытии нового бара. False=оповещение при любом пересечении линий

extern int Alert.Timeout=60; // Деактивировать оповещения на N секунд после оповещения. Только когда Alert.NewBarOnly=false

extern bool Alert.Popup=true; // Всплывающее окно и звук при оповещении

extern bool Alert.Email=false; // Отправка электронного письма при оповещении

// Глобальные переменные модуля

double dBuffer0[];

double dBuffer1[];

double dBuffer2[];

double dBuffer3[];

bool bStartup;

void SetArrowType(int& iArrowUp, int& iArrowDn) {

switch (Show.ArrowType) {

case 1: // Тонкий

iArrowDn=ARROW_THIN_DN;

iArrowUp=ARROW_THIN_UP;

break;

case 2: // Полый

iArrowDn=ARROW_HOLLOW_DN;

iArrowUp=ARROW_HOLLOW_UP;

break;

case 3: // Круглый

iArrowDn=ARROW_ROUND_DN;

iArrowUp=ARROW_ROUND_UP;

break;

default: // Толстая

iArrowDn=ARROW_THICK_DN;

iArrowUp=ARROW_THICK_UP;

break;

}

}

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

// функция: init()

// Описание: Пользовательская функция инициализации индикатора.

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

int init() {

int iArrowUp;

int iArrowDn;

string sType;

string sTF;

SetArrowType(iArrowUp, iArrowDn );

SetIndexStyle(0,DRAW_ARROW,EMPTY,Show.ArrowSize);

SetIndexBuffer(0,dBuffer0);

SetIndexLabel(0, "TDI:Mkt-Up");

SetIndexArrow(0, iArrowUp);

SetIndexStyle(1,DRAW_ARROW,EMPTY,Show.ArrowSize);

SetIndexBuffer(1,dBuffer1);

SetIndexLabel(1, "TDI:Mkt-Dn");

SetIndexArrow(1, iArrowDn);

SetIndexStyle(2,DRAW_ARROW,EMPTY,Show.ArrowSize);

SetIndexBuffer(2,dBuffer2);

SetIndexLabel(2, "TDI:Sig-Up");

SetIndexArrow(2, iArrowUp);

SetIndexStyle(3,DRAW_ARROW,EMPTY,Show.ArrowSize);

SetIndexBuffer(3,dBuffer3);

SetIndexLabel(3, "TDI:Sig-Dn");

SetIndexArrow(3, iArrowDn);

if (Show.TimeFrame==0)

sTF="";

иначе

sTF=TF2Str(Show.TimeFrame);

IndicatorShortName(INDICATOR_NAME+""+sTF);

bStartup=true;

return(0);

}

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

// функция: deinit()

// Описание: Пользовательская функция деинициализации индикатора.

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

int deinit() {

return (0);

}

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

// функция: start()

// Описание: Пользовательская функция итерации индикатора.

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

int start() {

int iNewBars;

int iCountedBars;

int i;

double dVBHighLine; // Верхняя полоса волатильности - верхняя синяя линия

double dVBLowLine; // Нижняя полоса волатильности - нижняя синяя линия

double dMarketBaseLine0; // Базовая линия рынка - желтая линия

double dRSIPriceLine0; // RSI PriceLine - Зеленая линия

double dTradeSignalLine0; // Линия торгового сигнала - Красная линия

static double dMarketBaseLine1; // Базовая линия рынка - желтая линия

static double dRSIPriceLine1; // RSI PriceLine - Зеленая линия

static double dTradeSignalLine1; // Линия торгового сигнала - красная линия

double dOffset;

// Получение необработанных тиков

iCountedBars=IndicatorCounted();

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

if(iCountedBars>0) iCountedBars--;

iNewBars=Bars-iCountedBars;

for(i=iNewBars; i>=0; i--) {

// Получение предыдущих данных TDI

//if (Time!=tCurTime) {

//tCurTime=Time;

 

dMarketBaseLine1=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,2,i+1); // Желтая линия

dRSIPriceLine1=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,4,i+1); // Зеленая линия

dTradeSignalLine1=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,5,i+1); //Красная линия

//}

// Получение текущих данных TDI

dMarketBaseLine0=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,2,i); // Желтая линия

dRSIPriceLine0=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,4,i); // Зеленая линия

dTradeSignalLine0=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,5,i); // Красная линия

// Очистить текущий буфер дисплея

dBuffer0 = EMPTY_VALUE;

dBuffer1 = EMPTY_VALUE;

dBuffer2 = EMPTY_VALUE;

dBuffer3 = EMPTY_VALUE;

dOffset=Point*(10*Show.ArrowOffset/MarketInfo(Symbol(),MODE_TICKVALUE));

if (dRSIPriceLine0>dMarketBaseLine0 && dRSIPriceLine1dTradeSignalLine0 && Show.MarketBaseLine)

dBuffer0 = Low-dOffset;

else if (dRSIPriceLine0>dTradeSignalLine0 && dRSIPriceLine1<dTradeSignalLine1)

dBuffer2 = Low-dOffset;

if (dRSIPriceLine0dMarketBaseLine1 && dRSIPriceLine0<dTradeSignalLine0 && Show.MarketBaseLine)

dBuffer1 = High+dOffset;

else if (dRSIPriceLine0dTradeSignalLine1)

dBuffer3 = High+dOffset;

// Проверка наличия алертов

if (i==0) AlertCheck();

}

// Сброс флага запуска

if (bStartup) bStartup=false;

// Пока-пока

return(0);

}

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

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

// функция: TF2Str()

// Описание: Преобразование таймфрейма в строку

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

string TF2Str(int iPeriod) {

switch(iPeriod) {

case PERIOD_M1: return("M1");

case PERIOD_M5: return("M5");

case PERIOD_M15: return("M15");

case PERIOD_M30: return("M30");

case PERIOD_H1: return("H1");

case PERIOD_H4: return("H4");

case PERIOD_D1: return("D1");

case PERIOD_W1: return("W1");

case PERIOD_MN1: return("MN1");

по умолчанию: return("M "+iPeriod);

}

}

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

// функция: AlertCheck()

// Описание: Проверка наличия условий оповещения и выполнение оповещений

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

void AlertCheck() {

string sAlertMsg;

static datetime tCurTime=0;

static int iAlertTimer[2];

static int iAlertStatus[2];

double dMarketBaseLine[2]; // Базовая линия рынка - желтая линия

double dRSIPriceLine[2]; // RSI PriceLine - зеленая линия

double dTradeSignalLine[2]; // Линия торгового сигнала - красная линия

int i,j;

bool bNewBar=false;

// Прервать работу, если индикатор только что запустился

if (bStartup) {

tCurTime=Time[0];

return(0);

}

// Проверяем наличие предупреждений

if (Alert.RSIPriceLine || Alert.MarketBaseLine) {

// Предупреждение, если только новый бар

if (Alert.NewBarOnly) {

// Сброс времени

if(tCurTime!=Time[0]) {

tCurTime=Time[0];

bNewBar=true;

// Получение данных TDI на новом баре, т.е. на барах 1 и 2

for (i=0; i<2; i++) {

j=i+1;

dMarketBaseLine=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,2,j); // Желтая линия

dRSIPriceLine=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,4,j); // Зеленая линия

dTradeSignalLine=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,5,j); // Красная линия

} //endfor

}//endif

}

else {

// Получение данных TDI на текущем баре, т.е. на барах 0 и 1

for (i=0; i<2; i++) {

dMarketBaseLine=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,2,i); // Желтая линия

dRSIPriceLine=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,4,i); // Зеленая линия

dTradeSignalLine=iCustom(NULL,Show.TimeFrame,TDI_INDI,TDI.RSIPeriod,TDI.RSIPrice,TDI.VolatilityBand,TDI.RSIPriceLine,

TDI.RSIPriceType,TDI.TradeSignalLine,TDI.TradeSignalType,5,i); // Красная линия

} //endfor

} //end if(Alert.NewBarOnly)

if (bNewBar || (!Alert.NewBarOnly && iAlertTimer[0]<GetTickCount())) {

//Alert RSIPriceLine > TradeSignalLine

if (dRSIPriceLine[0]>dTradeSignalLine[0] && dRSIPriceLine[1]<dTradeSignalLine[1] && Alert.RSIPriceLine) {

if (!Alert.NewBarOnly) iAlertTimer[0]=GetTickCount()+Alert.Timeout*1000;

sAlertMsg="TDI Alert - "+Symbol()+" "+TF2Str(Period())+": RSIPriceLine Above TradeSignalLine.";

if (Alert.Popup) Alert(sAlertMsg);

if (Alert.Email) SendMail( sAlertMsg, "MT4 Alert!\n" + TimeToStr(TIME_DATE|TIME_SECONDS )+"\n "+sAlertMsg);

} //end if

//Алерт RSIPriceLine < TradeSignalLine

if (dRSIPriceLine[0]dTradeSignalLine[1] && Alert.RSIPriceLine) {

//PrintD("RSIPriceLine < TradeSignalLine");

if (!Alert.NewBarOnly) iAlertTimer[0]=GetTickCount()+Alert.Timeout*1000;

sAlertMsg="TDI Alert - "+Symbol()+" "+TF2Str(Period())+": RSIPriceLine Ниже TradeSignalLine.";

if (Alert.Popup) Alert(sAlertMsg);

if (Alert.Email) SendMail( sAlertMsg, "MT4 Alert!\n" + TimeToStr(TIME_DATE|TIME_SECONDS )+"\n "+sAlertMsg);

} //end if

} //end if

if (bNewBar || (!Alert.NewBarOnly && iAlertTimer[1]<GetTickCount())) {

//Alert if RSIPriceLine > TradeSignalLine && dMarketBaseLine

if (dRSIPriceLine[0]>dMarketBaseLine[0] && dRSIPriceLine[1]<dMarketBaseLine[1] && Alert.MarketBaseLine) {

if (dRSIPriceLine[0]>dTradeSignalLine[0] && dRSIPriceLine[1]<dTradeSignalLine[1]) {

if (!Alert.NewBarOnly) iAlertTimer[1]=GetTickCount()+Alert.Timeout*1000;

sAlertMsg="TDI Alert - "+Symbol()+" "+TF2Str(Period())+": RSIPriceLine Выше TradeSignalLine и MarketBaseLine.";

if (Alert.Popup) Alert(sAlertMsg);

if (Alert.Email) SendMail( sAlertMsg, "MT4 Alert!\n" + TimeToStr(TIME_DATE|TIME_SECONDS )+"\n "+sAlertMsg);

} //end if

} //end if

//Alert if RSIPriceLine < TradeSignalLine && dMarketBaseLine

if (dRSIPriceLine[0]dMarketBaseLine[1] && Alert.MarketBaseLine) {

if (dRSIPriceLine[0]dTradeSignalLine[1]) {

if (!Alert.NewBarOnly) iAlertTimer[1]=GetTickCount()+Alert.Timeout*1000;

sAlertMsg="TDI Alert - "+Symbol()+" "+TF2Str(Period())+": RSIPriceLine Ниже TradeSignalLine и MarketBaseLine.";

if (Alert.Popup) Alert(sAlertMsg);

if (Alert.Email) SendMail( sAlertMsg, "MT4 Alert!\n" + TimeToStr(TIME_DATE|TIME_SECONDS )+"\n "+sAlertMsg);

} //end if

} //end if

} //end if

}//end if(Alert.RSIPriceLine || Alert.MarketBaseLine)

return(0);

}

ALERT: Я разделил код на две части из-за политики 10k; поэтому просто скопируйте обе части в одну и создайте индикатор!

 

Ладно, ребята, вот, пожалуйста, извините за все формулы!

Файлы:
tdi-2.mq4  4 kb
 

Неправильный Просто скопировал правильный код в другой, переписал старый, скомпилировал его, а файл все еще использует старый код?! Не понимаю; в любом случае код правильный

 
Jonny473:
Неправильный Просто скопировал правильный код в другой, переписал старый, скомпилировал его, а файл все еще использует старый код?! Не понимаю; в любом случае код правильный

Код, который я разместил раньше....

 

На моем старом ноутбуке установлена версия Vista, поэтому файлы mq4 исчезают; теперь все должно работать!

Файлы:
tdi-2.mq4  4 kb
Причина обращения: