Перейти к содержанию
Форекс Форум трейдеров Академии «MasterForex-V»

Создание индикаторов


Рекомендуемые сообщения

Доброго времени суток. Не могу ничего найти по созданию индикаторов в метастоке, может, подскажете какую веточку...
Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...
  • Ответов 159
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

Доброго времени суток!!!

Умные люди помогите! Оч. нужен индюк показувающий угол наклона (в градусах) МА к горизонтали.

Или подскажите с кодом плиз

Ссылка на комментарий
Поделиться на другие сайты

Здравствуйте программеры, есть индюк основанный на тиках он сделан по моей стратегии скальпера, нужна отфильтровка сигналов. Вот условие которое нужно добавить в код.

 

Индикатор тиковый.

 

Можно ли добавить дополнительное условие для сигнала алерта??? А то индюк подает сигналы, большая часть не правильная, я бы хотел отфильтровать их, вот таким условием.

 

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

 

И тоже вывести во внешние переменные, для этого условия.

 

Y= 3; // сколько раз был уровень одинаковый в промежутке t 2

t 2=10; // промежуток времени для Y

 

Если это не возможно, все равно спасибо тому кто откликнется.

 

#property indicator_chart_window


extern int taim=120;//ceк запоминать данные
extern int S=30;//пп пройденное расстояние в промежутке t

double TiksBase[]; // Массив цен
int gTimeLeft;
// -- добовляем тик в базу

int fAddTiks(int TimeLeft)
{

for (int e=ArraySize(TiksBase)-1;e>TimeLeft;e--)
{
TiksBase[e]=TiksBase[e-1];
}
for (int s=0;s<TimeLeft;s++)
{
TiksBase[s]=Bid;
}

}
// -- получаем разницу за промежуток

int fdCost()
{
int MIN=ArrayMinimum(TiksBase);
int MAX=ArrayMaximum(TiksBase);

if (TiksBase[MIN]!=EMPTY_VALUE && TiksBase[MAX]!=EMPTY_VALUE )
{

if (MIN<MAX){return( ((TiksBase[MAX]-TiksBase[MIN])/Point)*(-1) );}
if (MIN>MAX){return( ((TiksBase[MAX]-TiksBase[MIN])/Point) );}
}
return(0);
}

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators

ArrayResize(TiksBase,taim);
ArrayInitialize(TiksBase,EMPTY_VALUE);
gTimeLeft=TimeLocal();
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{

// -- дбовляем тик в базу
fAddTiks((TimeLocal()-gTimeLeft));


gTimeLeft=TimeLocal();


if (MathAbs(fdCost())>S)
{
if (fdCost()>0){Alert("Sell импульс",MathAbs(fdCost()),"пипс от",TiksBase[ArrayMinimum(TiksBase)]," до ",Bid);}
if (fdCost()<0){Alert("Buy импульс",MathAbs(fdCost()),"пипс от",TiksBase[ArrayMaximum(TiksBase)]," до ",Ask);}
ArrayInitialize(TiksBase,EMPTY_VALUE);
}


//----
return(0);
}
//+------------------------------------------------------------------+

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...
Здравствуйте! Скажите, пожалуйста, как установить готовый индикатор Pivot Points в МТ-4? Изменено пользователем gladius
Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...
Я удивлён, что никто не задал вопроса! Никто не учится здесь и сейчас? Если есть те, кто хочет научиться, то пусть скажут мне одну не очень приятную особенность написанного нами индикатора....

Жду ещё 1 день.

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

Ссылка на комментарий
Поделиться на другие сайты

Здравствуйте! Скажите, пожалуйста, как установить готовый индикатор Pivot Points в МТ-4?

 

 

скопировать в папку experts/indicators, открыть через MetaEditor,скомпилировать,перезагрузить терминал

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Просьба к умельцам. Помогите изменить скиптр (так что бы он не рисовал линий, а только значение волн)//+------------------------------------------------------------------+

//| s_WaveMarker_CreateNew.mq4 |

//| * |

//| * |

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

#property copyright "Integer"

#property link "for-good-letters@yandex.ru"

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

//| script program start function |

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

int start()

{

color txtCol = Teal; // цвет надписей

color lnCol = Gray // цвет линий

//----

int zx;

switch(Period())

{

case 1: zx = 5; break;

case 5: zx = 10; break;

case 15: zx = 15; break;

case 30: zx = 20; break;

case 60: zx = 25; break;

case 240: zx = 30; break;

case 1440: zx = 35; break;

case 10080: zx = 150; break;

case 43200: zx = 250; break;

default: zx = 15;

 

 

}

int k;

int IndList[];

double TxtX[][9];

double TxtY[][9];

ArrayResize(IndList, 0);

ArrayResize(TxtX, 0);

ArrayResize(TxtY, 0);

while(!IsStopped())

{

bool Fnd = false;

for(int i = 0; i < ObjectsTotal(); i++)

{

if(StringFind(ObjectName(i), "WM(" + k + ")_", 0) == 0)

{

Fnd = true;

ArrayResize(IndList, ArraySize(IndList) + 1);

IndList[ArraySize(IndList)-1] = k;

ArrayResize(TxtX,ArraySize(TxtX) / 9 + 1);

TxtX[ArraySize(TxtX)/9-1][0] = ObjectGet("WM(" + k + ")_" +

"T_0", OBJPROP_TIME1);

TxtX[ArraySize(TxtX)/9-1][0] = ObjectGet("WM(" + k + ")_" +

"T_1", OBJPROP_TIME1);

TxtX[ArraySize(TxtX)/9-1][1] = ObjectGet("WM(" + k + ")_" +

"T_2", OBJPROP_TIME1);

TxtX[ArraySize(TxtX)/9-1][2] = ObjectGet("WM(" + k + ")_" +

"T_3", OBJPROP_TIME1);

TxtX[ArraySize(TxtX)/9-1][3] = ObjectGet("WM(" + k + ")_" +

"T_4", OBJPROP_TIME1);

TxtX[ArraySize(TxtX)/9-1][4] = ObjectGet("WM(" + k + ")_" +

"T_5", OBJPROP_TIME1);

TxtX[ArraySize(TxtX)/9-1][5] = ObjectGet("WM(" + k + ")_" +

"T_A", OBJPROP_TIME1);

TxtX[ArraySize(TxtX)/9-1][6] = ObjectGet("WM(" + k + ")_" +

"T_B", OBJPROP_TIME1);

TxtX[ArraySize(TxtX)/9-1][7] = ObjectGet("WM(" + k + ")_" +

"T_C", OBJPROP_TIME1);

ArrayResize(TxtY, ArraySize(TxtY) / 9 + 1);

TxtY[ArraySize(TxtY)/9-1][0] = ObjectGet("WM(" + k + ")_" +

"T_0", OBJPROP_PRICE1);

TxtY[ArraySize(TxtY)/9-1][0] = ObjectGet("WM(" + k + ")_" +

"T_1", OBJPROP_PRICE1);

TxtY[ArraySize(TxtY)/9-1][1] = ObjectGet("WM(" + k + ")_" +

"T_2", OBJPROP_PRICE1);

TxtY[ArraySize(TxtY)/9-1][2] = ObjectGet("WM(" + k + ")_" +

"T_3", OBJPROP_PRICE1);

TxtY[ArraySize(TxtY)/9-1][3] = ObjectGet("WM(" + k + ")_" +

"T_4", OBJPROP_PRICE1);

TxtY[ArraySize(TxtY)/9-1][4] = ObjectGet("WM(" + k + ")_" +

"T_5", OBJPROP_PRICE1);

TxtY[ArraySize(TxtY)/9-1][5] = ObjectGet("WM(" + k + ")_" +

"T_A", OBJPROP_PRICE1);

TxtY[ArraySize(TxtY)/9-1][6] = ObjectGet("WM(" + k + ")_" +

"T_B", OBJPROP_PRICE1);

TxtY[ArraySize(TxtY)/9-1][7] = ObjectGet("WM(" + k + ")_" +

"T_C", OBJPROP_PRICE1);

break;

}

}

if(!Fnd)

{

ArrayResize(IndList, ArraySize(IndList) + 1);

IndList[ArraySize(IndList) - 1] = k;

break;

}

k++;

}

int fb = FirstVisibleBar() - 5;

while(!IsStopped())

{

if(ObjectFind("WM(" + k + ")_" + "T_0") != 0)

{

ObjectCreate("WM(" + k + ")_" + "T_0", OBJ_TEXT, 0, MyTime(fb),

Close[fb] + zx*Point);

ObjectSetText("WM(" + k + ")_" + "T_0", "0", 8, "Arial", txtCol);

}

if(ObjectFind("WM(" + k + ")_" + "T_1") != 0)

{

ObjectCreate("WM(" + k + ")_" + "T_1", OBJ_TEXT, 0, MyTime(fb - 5),

Close[fb] + zx*Point);

ObjectSetText("WM(" + k + ")_" + "T_1", "1", 8, "Arial", txtCol);

}

if(ObjectFind("WM(" + k + ")_" + "T_2") != 0)

{

ObjectCreate("WM(" + k + ")_" + "T_2", OBJ_TEXT, 0, MyTime(fb - 10),

Close[fb]+zx*Point);

ObjectSetText("WM(" + k + ")_" + "T_2", "2", 8, "Arial", txtCol);

}

if(ObjectFind("WM(" + k + ")_" + "T_3") != 0)

{

ObjectCreate("WM(" + k + ")_" + "T_3", OBJ_TEXT, 0, MyTime(fb - 15),

Close[fb] + zx*Point);

ObjectSetText("WM(" + k + ")_" + "T_3", "3", 8, "Arial", txtCol);

}

if(ObjectFind("WM(" + k + ")_" + "T_4") != 0)

{

ObjectCreate("WM(" + k + ")_" + "T_4", OBJ_TEXT, 0, MyTime(fb - 20),

Close[fb] + zx*Point);

ObjectSetText("WM(" + k + ")_" + "T_4", "4", 8, "Arial", txtCol);

}

if(ObjectFind("WM(" + k + ")_" + "T_5") != 0)

{

ObjectCreate("WM(" + k + ")_" + "T_5", OBJ_TEXT, 0, MyTime(fb - 25),

Close[fb] + zx*Point);

ObjectSetText("WM(" + k + ")_" + "T_5", "5", 8, "Arial", txtCol);

}

if(ObjectFind("WM(" + k + ")_" + "T_A") != 0)

{

ObjectCreate("WM(" + k + ")_" + "T_A", OBJ_TEXT, 0, MyTime(fb - 30),

Close[fb] + zx*Point);

ObjectSetText("WM(" + k + ")_" + "T_A", "A", 8, "Arial", txtCol);

}

if(ObjectFind("WM(" + k + ")_" + "T_B") != 0)

{

ObjectCreate("WM(" + k + ")_" + "T_B", OBJ_TEXT, 0, MyTime(fb - 35),

Close[fb] + zx*Point);

ObjectSetText("WM(" + k + ")_" + "T_B", "B", 8, "Arial", txtCol);

}

if(ObjectFind("WM(" + k + ")_" + "T_C") != 0)

{

ObjectCreate("WM(" + k + ")_" + "T_C", OBJ_TEXT, 0, MyTime(fb - 40),

Close[fb] + zx*Point);

ObjectSetText("WM(" + k + ")_" + "T_C", "C", 8, "Arial", txtCol);

}

for(int j = 0; j < ArraySize(IndList); j++)

{

k = IndList[j];

if(j < ArraySize(IndList) - 1)

{

if(ObjectFind("WM(" + k + ")_" + "T_0") != 0)

{

ObjectCreate("WM(" + k + ")_" + "T_0", OBJ_TEXT,

0, TxtX[j][0], TxtY[j][0]);

ObjectSetText("WM(" + k + ")_" + "T_0", "0", 8,

"Arial", txtCol);

}

if(ObjectFind("WM(" + k + ")_" + "T_1") != 0)

{

ObjectCreate("WM(" + k + ")_" + "T_1", OBJ_TEXT,

0, TxtX[j][1], TxtY[j][1]);

ObjectSetText("WM(" + k + ")_" + "T_1", "1", 8,

"Arial", txtCol);

}

if(ObjectFind("WM(" + k + ")_" + "T_2") != 0)

{

ObjectCreate("WM(" + k + ")_" + "T_2", OBJ_TEXT,

0, TxtX[j][2], TxtY[j][2]);

ObjectSetText("WM(" + k + ")_" + "T_2", "2", 8,

"Arial", txtCol);

}

if(ObjectFind("WM(" + k + ")_" + "T_3") != 0)

{

ObjectCreate("WM(" + k + ")_" + "T_3", OBJ_TEXT,

0, TxtX[j][3], TxtY[j][3]);

ObjectSetText("WM(" + k + ")_" + "T_3", "3", 8,

"Arial", txtCol);

}

if(ObjectFind("WM(" + k + ")_" + "T_4") != 0)

{

ObjectCreate("WM(" + k + ")_" + "T_4", OBJ_TEXT,

0, TxtX[j][4], TxtY[j][4]);

ObjectSetText("WM(" + k + ")_" + "T_4", "4", 8,

"Arial", txtCol);

}

if(ObjectFind("WM(" + k + ")_" + "T_5") != 0)

{

ObjectCreate("WM(" + k + ")_" + "T_5", OBJ_TEXT,

0, TxtX[j][5], TxtY[j][5]);

ObjectSetText("WM(" + k + ")_" + "T_5", "5", 8,

"Arial", txtCol);

}

if(ObjectFind("WM(" + k + ")_" + "T_A") != 0)

{

ObjectCreate("WM(" + k + ")_" + "T_A", OBJ_TEXT,

0, TxtX[j][6], TxtY[j][6]);

ObjectSetText("WM(" + k + ")_" + "T_A", "A", 8,

"Arial", txtCol);

}

if(ObjectFind("WM(" + k + ")_" + "T_B") != 0)

{

ObjectCreate("WM(" + k + ")_" + "T_B", OBJ_TEXT,

0, TxtX[j][7], TxtY[j][7]);

ObjectSetText("WM(" + k + ")_" + "T_B", "B", 8,

"Arial", txtCol);

}

if(ObjectFind("WM(" + k + ")_" + "T_C") != 0)

{

ObjectCreate("WM(" + k + ")_" + "T_C", OBJ_TEXT,

0, TxtX[j][8], TxtY[j][8]);

ObjectSetText("WM(" + k + ")_" + "T_C", "C", 8,

"Arial", txtCol);

}

TxtX[j][0]=ObjectGet("WM("+k+")_"+"T_0",OBJPROP_TIME1);

TxtX[j][1]=ObjectGet("WM("+k+")_"+"T_1",OBJPROP_TIME1);

TxtX[j][2]=ObjectGet("WM("+k+")_"+"T_2",OBJPROP_TIME1);

TxtX[j][3]=ObjectGet("WM("+k+")_"+"T_3",OBJPROP_TIME1);

TxtX[j][4]=ObjectGet("WM("+k+")_"+"T_4",OBJPROP_TIME1);

TxtX[j][5]=ObjectGet("WM("+k+")_"+"T_5",OBJPROP_TIME1);

TxtX[j][6]=ObjectGet("WM("+k+")_"+"T_A",OBJPROP_TIME1);

TxtX[j][7]=ObjectGet("WM("+k+")_"+"T_B",OBJPROP_TIME1);

TxtX[j][8]=ObjectGet("WM("+k+")_"+"T_C",OBJPROP_TIME1);

TxtY[j][0]=ObjectGet("WM("+k+")_"+"T_0",OBJPROP_PRICE1);

TxtY[j][1]=ObjectGet("WM("+k+")_"+"T_1",OBJPROP_PRICE1);

TxtY[j][2]=ObjectGet("WM("+k+")_"+"T_2",OBJPROP_PRICE1);

TxtY[j][3]=ObjectGet("WM("+k+")_"+"T_3",OBJPROP_PRICE1);

TxtY[j][4]=ObjectGet("WM("+k+")_"+"T_4",OBJPROP_PRICE1);

TxtY[j][5]=ObjectGet("WM("+k+")_"+"T_5",OBJPROP_PRICE1);

TxtY[j][6]=ObjectGet("WM("+k+")_"+"T_A",OBJPROP_PRICE1);

TxtY[j][7]=ObjectGet("WM("+k+")_"+"T_B",OBJPROP_PRICE1);

TxtY[j][8]=ObjectGet("WM("+k+")_"+"T_C",OBJPROP_PRICE1);

}

int l_1_x1 = ObjectGet("WM("+ k + ")_" + "T_0", OBJPROP_TIME1);

int l_1_x2 = ObjectGet("WM(" + k + ")_" + "T_1", OBJPROP_TIME1);

double l_1_y1 = ObjectGet("WM(" + k + ")_" + "T_0", OBJPROP_PRICE1) +

Point*zx;

double l_1_y2 = ObjectGet("WM(" + k + ")_" + "T_1",OBJPROP_PRICE1) +

Point*zx;

if(l_1_y1 < l_1_y2)

{

if(l_1_x1 <= Time[0])

l_1_y1 = Low[iBarShift(NULL, 0, l_1_x1, false)];

if(l_1_x2 <= Time[0])

l_1_y2 = High[iBarShift(NULL, 0, l_1_x2, false)];

}

if(l_1_y1 > l_1_y2)

{

if(l_1_x1 <= Time[0])

l_1_y1 = High[iBarShift(NULL, 0, l_1_x1, false)];

if(l_1_x2 <= Time[0])

l_1_y2 = Low[iBarShift(NULL, 0, l_1_x2, false)];

}

int l_2_x1 = ObjectGet("WM(" + k + ")_" + "T_1", OBJPROP_TIME1);

int l_2_x2 = ObjectGet("WM(" + k + ")_" + "T_2", OBJPROP_TIME1);

double l_2_y1 = ObjectGet("WM(" + k + ")_" + "T_1", OBJPROP_PRICE1) +

Point*zx;

double l_2_y2 = ObjectGet("WM(" + k + ")_" + "T_2", OBJPROP_PRICE1) +

Point*zx;

if(l_2_y1 < l_2_y2)

{

if(l_2_x1 <= Time[0])

l_2_y1 = Low[iBarShift(NULL, 0, l_2_x1, false)];

if(l_2_x2 <= Time[0])

l_2_y2 = High[iBarShift(NULL, 0, l_2_x2, false)];

}

if(l_2_y1 > l_2_y2)

{

if(l_2_x1 <= Time[0])

l_2_y1 = High[iBarShift(NULL, 0, l_2_x1, false)];

if(l_2_x2 <= Time[0])

l_2_y2 = Low[iBarShift(NULL, 0, l_2_x2, false)];

}

int l_3_x1 = ObjectGet("WM(" + k + ")_" + "T_2", OBJPROP_TIME1);

int l_3_x2 = ObjectGet("WM(" + k + ")_" + "T_3", OBJPROP_TIME1);

double l_3_y1 = ObjectGet("WM(" + k + ")_" + "T_2", OBJPROP_PRICE1) +

Point*zx;

double l_3_y2 = ObjectGet("WM(" + k + ")_" + "T_3", OBJPROP_PRICE1) +

Point*zx;

if(l_3_y1 < l_3_y2)

{

if(l_3_x1 <= Time[0])

l_3_y1 = Low[iBarShift(NULL, 0, l_3_x1, false)];

if(l_3_x2 <= Time[0])

l_3_y2 = High[iBarShift(NULL, 0,l_3_x2, false)];

}

if(l_3_y1>l_3_y2)

{

if(l_3_x1 <= Time[0])

l_3_y1 = High[iBarShift(NULL, 0, l_3_x1, false)];

if(l_3_x2 <= Time[0])

l_3_y2 = Low[iBarShift(NULL, 0, l_3_x2, false)];

}

int l_4_x1 = ObjectGet("WM(" + k + ")_"+"T_3",OBJPROP_TIME1);

int l_4_x2 = ObjectGet("WM(" + k + ")_"+"T_4",OBJPROP_TIME1);

double l_4_y1 = ObjectGet("WM(" + k + ")_" + "T_3", OBJPROP_PRICE1) +

Point*zx;

double l_4_y2 = ObjectGet("WM(" + k + ")_" + "T_4", OBJPROP_PRICE1) +

Point*zx;

if(l_4_y1 < l_4_y2)

{

if(l_4_x1 <= Time[0])

l_4_y1 = Low[iBarShift(NULL, 0, l_4_x1, false)];

if(l_4_x2 <= Time[0])

l_4_y2 = High[iBarShift(NULL, 0, l_4_x2, false)];

}

if(l_4_y1 > l_4_y2)

{

if(l_4_x1 <= Time[0])

l_4_y1 = High[iBarShift(NULL, 0, l_4_x1, false)];

if(l_4_x2 <= Time[0])

l_4_y2=Low[iBarShift(NULL, 0, l_4_x2, false)];

}

int l_5_x1 = ObjectGet("WM(" + k + ")_" + "T_4", OBJPROP_TIME1);

int l_5_x2 = ObjectGet("WM(" + k + ")_" + "T_5", OBJPROP_TIME1);

double l_5_y1 = ObjectGet("WM(" + k + ")_" + "T_4", OBJPROP_PRICE1) +

Point*zx;

double l_5_y2 = ObjectGet("WM(" + k + ")_" + "T_5", OBJPROP_PRICE1) +

Point*zx;

if(l_5_y1 < l_5_y2)

{

if(l_5_x1 <= Time[0])

l_5_y1 = Low[iBarShift(NULL, 0, l_5_x1, false)];

if(l_5_x2 <= Time[0])

l_5_y2 = High[iBarShift(NULL, 0, l_5_x2, false)];

}

if(l_5_y1 > l_5_y2)

{

if(l_5_x1 <= Time[0])

l_5_y1 = High[iBarShift(NULL, 0, l_5_x1, false)];

if(l_5_x2 <= Time[0])

l_5_y2 = Low[iBarShift(NULL, 0, l_5_x2, false)];

}

int l_6_x1 = ObjectGet("WM(" + k + ")_" + "T_5", OBJPROP_TIME1);

int l_6_x2 = ObjectGet("WM(" + k + ")_" + "T_A", OBJPROP_TIME1);

double l_6_y1=ObjectGet("WM(" + k + ")_" + "T_5", OBJPROP_PRICE1) +

Point*zx;

double l_6_y2=ObjectGet("WM(" + k + ")_" + "T_A", OBJPROP_PRICE1) +

Point*zx;

if(l_6_y1 < l_6_y2)

{

if(l_6_x1 <= Time[0])

l_6_y1 = Low[iBarShift(NULL, 0, l_6_x1, false)];

if(l_6_x2 <= Time[0])

l_6_y2 = High[iBarShift(NULL, 0, l_6_x2, false)];

}

if(l_6_y1 > l_6_y2)

{

if(l_6_x1 <= Time[0])

l_6_y1 = High[iBarShift(NULL, 0, l_6_x1, false)];

if(l_6_x2 <= Time[0])

l_6_y2 = Low[iBarShift(NULL, 0, l_6_x2, false)];

}

int l_7_x1 = ObjectGet("WM(" + k + ")_" + "T_A", OBJPROP_TIME1);

int l_7_x2 = ObjectGet("WM(" + k + ")_" + "T_B", OBJPROP_TIME1);

double l_7_y1 = ObjectGet("WM(" + k + ")_" + "T_A", OBJPROP_PRICE1) +

Point*zx;

double l_7_y2 = ObjectGet("WM(" + k + ")_" + "T_B", OBJPROP_PRICE1) +

Point*zx;

if(l_7_y1 < l_7_y2)

{

if(l_7_x1 <= Time[0])

l_7_y1 = Low[iBarShift(NULL, 0, l_7_x1, false)];

if(l_7_x2 <= Time[0])

l_7_y2 = High[iBarShift(NULL, 0, l_7_x2, false)];

}

if(l_7_y1 > l_7_y2)

{

if(l_7_x1 <= Time[0])

l_7_y1 = High[iBarShift(NULL, 0, l_7_x1, false)];

if(l_7_x2 <= Time[0])

l_7_y2 = Low[iBarShift(NULL, 0, l_7_x2, false)];

}

int l_8_x1 = ObjectGet("WM(" + k + ")_" + "T_B", OBJPROP_TIME1);

int l_8_x2 = ObjectGet("WM(" + k + ")_" + "T_C", OBJPROP_TIME1);

double l_8_y1 = ObjectGet("WM(" + k + ")_" + "T_B", OBJPROP_PRICE1) +

Point*zx;

double l_8_y2 = ObjectGet("WM(" + k + ")_" + "T_C", OBJPROP_PRICE1) +

Point*zx;

if(l_8_y1 < l_8_y2)

{

if(l_8_x1 <= Time[0])

l_8_y1 = Low[iBarShift(NULL, 0, l_8_x1, false)];

if(l_8_x2 <= Time[0])

l_8_y2 = High[iBarShift(NULL, 0, l_8_x2, false)];

}

if(l_8_y1 > l_8_y2)

{

if(l_8_x1 <= Time[0])

l_8_y1 = High[iBarShift(NULL, 0, l_8_x1, false)];

if(l_8_x2 <= Time[0])

l_8_y2 = Low[iBarShift(NULL, 0, l_8_x2, false)];

}

if(ObjectFind("WM(" + k + ")_" + "L_1") != 0)

{

ObjectCreate("WM(" + k + ")_" + "L_1", OBJ_TREND, 0,

l_1_x1, l_1_y1, l_1_x2, l_1_y2);

}

ObjectSet("WM(" + k + ")_" + "L_1", OBJPROP_TIME1, l_1_x1);

ObjectSet("WM(" + k + ")_" + "L_1", OBJPROP_PRICE1, l_1_y1);

ObjectSet("WM(" + k + ")_" + "L_1", OBJPROP_TIME2, l_1_x2);

ObjectSet("WM(" + k + ")_" + "L_1", OBJPROP_PRICE2, l_1_y2);

ObjectSet("WM(" + k + ")_" + "L_1", OBJPROP_COLOR, lnCol);

ObjectSet("WM(" + k + ")_" + "L_1", OBJPROP_RAY, false);

if(ObjectFind("WM(" + k + ")_" + "L_2") != 0)

{

ObjectCreate("WM(" + k + ")_" + "L_2", OBJ_TREND, 0,

l_2_x1, l_2_y1, l_2_x2, l_2_y2);

}

ObjectSet("WM(" + k + ")_" + "L_2", OBJPROP_TIME1, l_2_x1);

ObjectSet("WM(" + k + ")_" + "L_2", OBJPROP_TIME2, l_2_x2);

ObjectSet("WM(" + k + ")_" + "L_2", OBJPROP_PRICE1, l_2_y1);

ObjectSet("WM(" + k + ")_" + "L_2", OBJPROP_PRICE2, l_2_y2);

ObjectSet("WM(" + k + ")_" + "L_2", OBJPROP_COLOR, lnCol);

ObjectSet("WM(" + k + ")_" + "L_2", OBJPROP_RAY, false);

if(ObjectFind("WM(" + k + ")_" + "L_3") != 0)

{

ObjectCreate("WM(" + k + ")_" + "L_3", OBJ_TREND, 0,

l_3_x1, l_3_y1, l_3_x2, l_3_y2);

}

ObjectSet("WM(" + k + ")_" + "L_3", OBJPROP_TIME1, l_3_x1);

ObjectSet("WM(" + k + ")_" + "L_3", OBJPROP_TIME2, l_3_x2);

ObjectSet("WM(" + k + ")_" + "L_3", OBJPROP_PRICE1, l_3_y1);

ObjectSet("WM(" + k + ")_" + "L_3", OBJPROP_PRICE2, l_3_y2);

ObjectSet("WM(" + k + ")_" + "L_3", OBJPROP_COLOR, lnCol);

ObjectSet("WM(" +k + ")_" + "L_3", OBJPROP_RAY, false);

if(ObjectFind("WM(" + k + ")_" + "L_4") != 0)

{

ObjectCreate("WM(" + k + ")_" + "L_4", OBJ_TREND, 0,

l_4_x1, l_4_y1, l_4_x2, l_4_y2);

}

ObjectSet("WM(" + k + ")_" + "L_4", OBJPROP_TIME1, l_4_x1);

ObjectSet("WM(" + k + ")_" + "L_4", OBJPROP_TIME2, l_4_x2);

ObjectSet("WM(" + k + ")_" + "L_4", OBJPROP_PRICE1, l_4_y1);

ObjectSet("WM(" + k + ")_" + "L_4", OBJPROP_PRICE2, l_4_y2);

ObjectSet("WM(" + k + ")_" + "L_4", OBJPROP_COLOR, lnCol);

ObjectSet("WM(" + k + ")_" + "L_4", OBJPROP_RAY, false);

if(ObjectFind("WM(" + k + ")_" + "L_5") != 0)

{

ObjectCreate("WM(" + k + ")_" + "L_5", OBJ_TREND, 0,

l_5_x1, l_5_y1, l_5_x2, l_5_y2);

}

ObjectSet("WM(" + k + ")_" + "L_5", OBJPROP_TIME1, l_5_x1);

ObjectSet("WM(" + k + ")_" + "L_5", OBJPROP_TIME2, l_5_x2);

ObjectSet("WM(" + k + ")_" + "L_5", OBJPROP_PRICE1, l_5_y1);

ObjectSet("WM(" + k + ")_" + "L_5", OBJPROP_PRICE2, l_5_y2);

ObjectSet("WM(" + k + ")_" + "L_5", OBJPROP_COLOR, lnCol);

ObjectSet("WM(" + k + ")_" + "L_5", OBJPROP_RAY, false);

if(ObjectFind("WM(" + k + ")_" + "L_6") != 0)

{

ObjectCreate("WM(" + k + ")_" + "L_6", OBJ_TREND, 0,

l_6_x1, l_6_y1, l_6_x2, l_6_y2);

}

ObjectSet("WM(" + k + ")_" + "L_6", OBJPROP_TIME1, l_6_x1);

ObjectSet("WM(" + k + ")_" + "L_6", OBJPROP_TIME2, l_6_x2);

ObjectSet("WM(" + k + ")_" + "L_6", OBJPROP_PRICE1, l_6_y1);

ObjectSet("WM(" + k + ")_" + "L_6", OBJPROP_PRICE2, l_6_y2);

ObjectSet("WM(" + k + ")_" + "L_6", OBJPROP_COLOR, lnCol);

ObjectSet("WM(" + k + ")_" + "L_6", OBJPROP_RAY, false);

if(ObjectFind("WM(" + k + ")_" + "L_7") != 0)

{

ObjectCreate("WM(" + k + ")_" + "L_7", OBJ_TREND, 0,

l_7_x1, l_7_y1, l_7_x2, l_7_y2);

}

ObjectSet("WM(" + k + ")_" + "L_7", OBJPROP_TIME1, l_7_x1);

ObjectSet("WM(" + k + ")_" + "L_7", OBJPROP_TIME2, l_7_x2);

ObjectSet("WM(" + k + ")_" + "L_7", OBJPROP_PRICE1, l_7_y1);

ObjectSet("WM(" + k + ")_" + "L_7", OBJPROP_PRICE2, l_7_y2);

ObjectSet("WM(" + k + ")_" + "L_7", OBJPROP_COLOR, lnCol);

ObjectSet("WM(" + k + ")_" + "L_7", OBJPROP_RAY, false);

if(ObjectFind("WM(" + k + ")_" + "L_8") != 0)

{

ObjectCreate("WM(" + k + ")_" + "L_8", OBJ_TREND, 0,

l_8_x1, l_8_y1, l_8_x2, l_8_y2);

}

ObjectSet("WM(" + k + ")_" + "L_8", OBJPROP_TIME1, l_8_x1);

ObjectSet("WM(" + k + ")_" + "L_8", OBJPROP_TIME2, l_8_x2);

ObjectSet("WM(" + k + ")_" + "L_8", OBJPROP_PRICE1, l_8_y1);

ObjectSet("WM(" + k + ")_" + "L_8", OBJPROP_PRICE2, l_8_y2);

ObjectSet("WM(" + k + ")_" + "L_8", OBJPROP_COLOR, lnCol);

ObjectSet("WM(" + k + ")_" + "L_8", OBJPROP_RAY, false);

}

WindowRedraw();

Sleep(1);

}

//----

return(0);

}

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

//| |

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

datetime MyTime(int bs)

{

if(bs < 0)

return(Time[0] + Period()*60*MathAbs(bs));

return(Time[bs]);

}

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

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...
Добрый день! Подскажите пожалуйста, есть ли у кого-нибудь пример кода окрашивания бара в определенный цвет? Заранее благодарен!
Ссылка на комментарий
Поделиться на другие сайты

  • 3 месяца спустя...
Здравствуйте! Есть одна идея, но для её реализации нужна помощь, тех кто умеет создавать индикаторы\советники…есть предположения, что количество тиков в волнах\подволнах являются действительным показателем ВУ(волнового уровня) не ТФ, т к за один и тот же промежуток времени может быть разное количество тиков, и чем их больше, тем выше ВУ…. Если существует закономерность в количестве тиков и ВУ волн\подволн (ету закономерность ещё нужно выявить и доказать) то в синтезе с другими елементами ето будит отличный помощник, возможно ето зависимость пропорциональна или ещё какая-либо…но если она есть, ето может помочь избежать убытков…на примере – вы открываетесь в расчёте на то, что закончился весь цикл АВС и собираетесь взять как минимум В от етого цикла, но вы берёте(если берёте) в(С), волна С оказалась а(С),,, или та же а(С) в С, предполагаемая, на самом деле А в А(С), о которой вы узнаете уже после в(С) и начале с(С)…бывают случаи когда движения действительно очень запутано…понимание етой закономерности и знание елементов окончания любого цикла давало бы понять, волна какого уровня пойдёт дальше…ето продвинуло бы нас ещё на шаг ближе, а там возможно к чему то большему………точка отсчёта для индикатора могла бы быть вертикальная линия времени и горизонтальная цены, ставя их на нужный мин\макс индикатор начинает подсчёт тиков, для начала достаточно етого, наблюдая и записывая показания…лучше было бы, если бы он мог запоминать (сколько тиков от такой точки до такой – знаю что в МТ4 нет истории тиков, запоминание тех что поступили в реальном времени) В принципе всё, интересно услышать ваши мнения, на сколько реально ето осуществить и т.д…можно в личку
Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Здраствуйте знатоки.

Мне захотелось сделать индюк, который является совокупностью стандартного индюка высяший на МТ4:

Это: 1 >>>> Bulls и 2 >>>> Bears

Ну чтобы два инд. ложились друг на друга и показывался как один.

 

Смотрите рисунок:

 

http://s46.radikal.ru/i112/0908/41/dda88202ec35.gif

 

Я тут нахимичил его пример, назвал Bulls_Bears_001 (short name - BuBe), который стоит последним на графике. Но там показывается параметр только Bears, а Bulls не показывается.

И после того как закомчим с этим хочу на него пристроить RCI или Stochastic. Помогите плз. Может быть станет всем полезным?!

 

А вот его код.

 

 

#property indicator_separate_window

#property indicator_buffers 2

#property indicator_color1 Lime

#property indicator_color2 Magenta

 

//---- input parameters

extern int BullsPeriod=21;

extern int BearsPeriod=21;

 

//---- buffers

double ExtMapBuffer1[];

double ExtMapBuffer2[];

 

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

//| Custom indicator initialization function |

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

int init()

{

//---- indicators

SetIndexStyle(0,DRAW_HISTOGRAM);

SetIndexBuffer(0,ExtMapBuffer1);

SetIndexStyle(1,DRAW_HISTOGRAM);

SetIndexBuffer(1,ExtMapBuffer2);

 

//---- drawing settings

SetIndexStyle (1,DRAW_HISTOGRAM);

SetIndexStyle (2,DRAW_HISTOGRAM);

IndicatorDigits(Digits+1);

SetIndexDrawBegin (1,21);

SetIndexDrawBegin (2,21);

 

//---- 2 indicator buffers maping

SetIndexBuffer (1,ExtMapBuffer1);

SetIndexBuffer (2,ExtMapBuffer2);

 

//---- name for DataWindow and indicator subwindow label

IndicatorShortName ("BuBe");

SetIndexLabel (1,NULL);

SetIndexLabel (2,NULL);

 

//---- initialization done

return(0);

}

 

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

//| Bulls and Bears |

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

int start()

{

int limit;

int counted_bars=IndicatorCounted();

double prev,current;

 

//---- last counted bar will be recounted

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

 

//---- macd

for(int i=0; i<limit; i++)

ExtMapBuffer1=iBullsPower(NULL,0,MODE_VOLUME,PRICE_CLOSE,i)-iBearsPower(NULL,0,MODE_VOLUME,PRICE_CLOSE,i);

ExtMapBuffer2=iBearsPower(NULL,0,MODE_VOLUME,PRICE_CLOSE,i)-iBearsPower(NULL,0,MODE_VOLUME,PRICE_CLOSE,i);

 

//---- dispatch values between 2 buffers

bool up=true;

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

{

current=ExtMapBuffer1;

prev=ExtMapBuffer1[i+1];

 

{

ExtMapBuffer2=current;

ExtMapBuffer1=0.0;

}

 

{

ExtMapBuffer1=current;

ExtMapBuffer2=0.0;

}

}

//---- done

return(0);

}

 

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

Ссылка на комментарий
Поделиться на другие сайты

Здраствуйте знатоки.

Мне захотелось сделать индюк, который является совокупностью стандартного индюка высяший на МТ4:

Это: 1 >>>> Bulls и 2 >>>> Bears

Ну чтобы два инд. ложились друг на друга и показывался как один.

 

Посмотрите, может этот подойдет?

 

 

 

Ссылка на комментарий
Поделиться на другие сайты

ExtMapBuffer2[i]=iBearsPower(NULL,0,MODE_VOLUME,PRICE_CLOSE,i)-iBearsPower(NULL,0,MODE_VOLUME,PRICE_CLOSE,i);

 

вот тут всегда ноль будет :)

 

 

Cпасибо. У меня так и написан - стоит ноль. Но когда ставлю на график Бирс показывает, а Булс нет. И еще не показывает минусовую значание и цифровую значению возле "BuBe". Еще раз спасибо.

 

Здраствуйте знатоки.

Мне захотелось сделать индюк, который является совокупностью стандартного индюка высяший на МТ4:

Это: 1 >>>> Bulls и 2 >>>> Bears

Ну чтобы два инд. ложились друг на друга и показывался как один.

 

Посмотрите, может этот подойдет?

 

 

 

 

Спасибо. Кажется хороший индикатор. А волны на нем это - Moving Average? Спасибо.

Ссылка на комментарий
Поделиться на другие сайты

Подскажите, плиз, такую вещь. На график добавлено несколько пользовательских индикаторов, каждый в своем окне. Хочется в этих окнах нарисовать линии, в каждом со своими параметрами. Как получить параметры индикатора в определенном окне, чтоб в зависимости от этого нарисовать линии?
Ссылка на комментарий
Поделиться на другие сайты

Подскажите, плиз, такую вещь. На график добавлено несколько пользовательских индикаторов, каждый в своем окне. Хочется в этих окнах нарисовать линии, в каждом со своими параметрами. Как получить параметры индикатора в определенном окне, чтоб в зависимости от этого нарисовать линии?

 

Я мог бы сказать - "никак" и был бы совершенно прав. :wink:

 

Однако, такая возможность существует! Смотрите в каталоге:

 

C:\...Trader 4\profiles\

 

Например, у меня есть такой профайл (текущий) Dax-ftse-1. Ему соответсвует каталог C:\...Trader 4\profiles\Dax-ftse-1

 

В этом каталоге есть такие файлики:

 

chart01.chr

chart02.chr

chart03.chr

chart04.chr

chart05.chr

chart06.chr

order.wnd

 

Вот и всё! Анализируйте ЭТО и получите ваше всё! :biggrin:

Ссылка на комментарий
Поделиться на другие сайты


×
×
  • Создать...