Скачать MetaTrader 5

Разработчики metaquotes помогите - трендовая линия по углу

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Пополняй свой счет с помощью WebMoney
Forex Trader
114257
Forex Trader 2008.11.30 13:13 

Используется уравнение для построения прямой на плоскости с заданными начальной точкой и углом.

На реальном графике EURGBP(Monthly) наносим луч в 15 градусов от минимума 3 бара(2008.08.01),

надо найти следующую расчётную точку, т.е. на 2 баре(2008.09.01).

При наложении на график луча, следующая точка – 0.7811. График не трогаем, что бы луч не сдвинулся. Окно в максимальном масштабе.

У меня примерно такой скрипт.

int start()

{

double q, Y, y; // угол, начальная координата, следующая координата

int X, х; // начальная координата, следующая координата

q=15.0; // угол в градусах

x= 2;

X= 3;

Y= 0.7792;

// Приведены 2 уравнения прямой по начальной точке и углу

y = MathTan(q)*x + (Y-MathTan(q)*X);

Alert(y);

y=MathTan(q)*(x-X)+Y;

Alert(y);

return(0);

}

Выводит результат:

1.6352

1.6352

Который находится значительно далеко от текущих значений.

А в действительности 0.7811

Далее.

Функция MathTan(q) вводит угол в радианах, Введём в код перевод градусов в радианы:

int start()

{

double q,y,Y;

int x,X;

q=15.0;

x= 2;

X= 3;

Y= 0.7792;

q = 15.0 * 3.14 / 180; //перевод 15 градусов в радианы

// y(x)=tan(q)x+(Y-tan(q)X)

y = MathTan(q)*x + (Y-MathTan(q)*X);

Alert(y);

// y6-y5=tgАЛЬФА(x6-x5)

y=MathTan(q)*(x-X)+Y;

Alert(y);

return(0);

}

Выводит результат: 0.5114 и 0.5114. Что, то же очень далеко от значения 0.7811.

Какие значения вводить вместо х и Х?

Спасибо.

Forex Trader
114257
Forex Trader 2008.11.30 21:25  
Замерь на экране расстояние между 10 барами и отложи его по вертикали, вычисли сколько это пипсов. Найденный коэффициент используй для своих построений.
Forex Trader
114257
Forex Trader 2008.11.30 21:28  

Ничо с этим не поделашь, ибо

иксы меряем в барах, а

игреки в пунктах =)

з.ы. есть же спец кнопка для подсветки кода,

от фиолетового в глазах рябит =)

Forex Trader
114257
Forex Trader 2008.12.19 23:10  
MaStak :

Ничо с этим не поделашь, ибо

иксы меряем в барах, а

игреки в пунктах =)

Спасибо Roger и MaStak.

Сколько спрашивал, утверждают, что это невозможно.

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

А разработчики всё молчат. Игнорируют - "ходят тут всякие ..., интересуются, чтоб им ... было".

Forex Trader
114257
Forex Trader 2008.12.23 12:33  

Приветствую djday

Аж самому стало интересно Ж)

После 50-й эдак попытки удалось таки увязать вещи казалось бы не совместимые :D

пиксели, пункты, бары и наконец треба угол.

Вот что у меня получилось

//+------------------------------------------------------------------+
//|                                                 TrendByAngle.mq4 |
//|                                                           MaStak |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "MaStak"
#property link      ""
#property indicator_chart_window

extern double ReqAngle=45;
double OriginalAngle=45;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
//---- 
    ObjectCreate("Trend",OBJ_TREND,0, Time[49], Close[0], Time[0], Close[0]);
    ObjectSet("Trend",OBJPROP_COLOR,Blue);
    ObjectSet("Trend",OBJPROP_WIDTH,1);
    ObjectSet("Trend",OBJPROP_RAY,true);
//----
   ObjectCreate("TrendByAngle",OBJ_TRENDBYANGLE,0, Time[0], Close[0]);
   ObjectSet("TrendByAngle",OBJPROP_ANGLE,OriginalAngle);
   ObjectSet("TrendByAngle",OBJPROP_COLOR,Red);
   ObjectSet("TrendByAngle",OBJPROP_WIDTH,1);
   ObjectSet("TrendByAngle",OBJPROP_RAY,true);
//----
   Comment("");
//----
   return(0);}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit(){
//----
   
//----
   return(0);}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
   if(NewBar())ObjectSet("TrendByAngle",OBJPROP_ANGLE,OriginalAngle);
//----
   ObjectSet("TrendByAngle",OBJPROP_PRICE1,Close[0]);
   ObjectSet("TrendByAngle",OBJPROP_TIME1,Time[0]);
double a=(Close[0]-ObjectGetValueByShift("TrendByAngle",49))*MathPow(10,Digits);// скока пунктафф на
double b=50 ;// на 50 баров
double k=a/b;
//----
Comment(k+"  "+ObjectGet("TrendByAngle",OBJPROP_ANGLE));
//----
k=k*ReqAngle/OriginalAngle;
double Price=Close[0]-50*k/MathPow(10,Digits);
   
   ObjectSet("Trend",OBJPROP_TIME1,Time[49]);
   ObjectSet("Trend",OBJPROP_TIME2,Time[0]);
   ObjectSet("Trend",OBJPROP_PRICE1,Price);
   ObjectSet("Trend",OBJPROP_PRICE2,Close[0]);
   
   return(0);}
//+------------------------------------------------------------------+
bool NewBar(){          // Новый бар=true/ иначе=false
if(Open[0]==High[0]&&High[0]==Low[0]&&Low[0]==Close[0])return(true);
else return(false);}
Остальное сам додумаешь если не лень ;)
Forex Trader
114257
Forex Trader 2009.02.07 20:41  
MaStak :

Приветствую djday

Аж самому стало интересно Ж)

После 50-й эдак попытки удалось таки увязать вещи казалось бы не совместимые :D

пиксели, пункты, бары и наконец треба угол.

Вот что у меня получилось

//+------------------------------------------------------------------+
//|                                                 TrendByAngle.mq4 |
//|                                                           MaStak |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "MaStak"
#property link      ""
#property indicator_chart_window

extern double ReqAngle=45;
double OriginalAngle=45;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
//---- 
    ObjectCreate("Trend",OBJ_TREND,0, Time[49], Close[0], Time[0], Close[0]);
    ObjectSet("Trend",OBJPROP_COLOR,Blue);
    ObjectSet("Trend",OBJPROP_WIDTH,1);
    ObjectSet("Trend",OBJPROP_RAY,true);
//----
   ObjectCreate("TrendByAngle",OBJ_TRENDBYANGLE,0, Time[0], Close[0]);
   ObjectSet("TrendByAngle",OBJPROP_ANGLE,OriginalAngle);
   ObjectSet("TrendByAngle",OBJPROP_COLOR,Red);
   ObjectSet("TrendByAngle",OBJPROP_WIDTH,1);
   ObjectSet("TrendByAngle",OBJPROP_RAY,true);
//----
   Comment("");
//----
   return(0);}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit(){
//----
   
//----
   return(0);}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
   if(NewBar())ObjectSet("TrendByAngle",OBJPROP_ANGLE,OriginalAngle);
//----
   ObjectSet("TrendByAngle",OBJPROP_PRICE1,Close[0]);
   ObjectSet("TrendByAngle",OBJPROP_TIME1,Time[0]);
double a=(Close[0]-ObjectGetValueByShift("TrendByAngle",49))*MathPow(10,Digits);// скока пунктафф на
double b=50 ;// на 50 баров
double k=a/b;
//----
Comment(k+"  "+ObjectGet("TrendByAngle",OBJPROP_ANGLE));
//----
k=k*ReqAngle/OriginalAngle;
double Price=Close[0]-50*k/MathPow(10,Digits);
   
   ObjectSet("Trend",OBJPROP_TIME1,Time[49]);
   ObjectSet("Trend",OBJPROP_TIME2,Time[0]);
   ObjectSet("Trend",OBJPROP_PRICE1,Price);
   ObjectSet("Trend",OBJPROP_PRICE2,Close[0]);
   
   return(0);}
//+------------------------------------------------------------------+
bool NewBar(){          // Новый бар=true/ иначе=false
if(Open[0]==High[0]&&High[0]==Low[0]&&Low[0]==Close[0])return(true);
else return(false);}
Остальное сам додумаешь если не лень ;)
Спасибо за помощь, но видимо не так поняли. В первом посте приведена формула расчёта координат луча. Ничего на графике строить и рисовать не надо. Задаётся начальная точка луча и угол луча, скрипт считает по формуле все координаты луча. Вывести эти координаты луча на экран. И всё. Рисовать и строить луч не надо. Спасибо.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий