[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 105

 

大家好。

我做了一个指标,它以45度画两条线。 当它相交时,我希望它是水平的。

那么,我如何计算交叉点呢?

我与前一天的低点/高点打成平局,通过一个点。

为了得到这样一条线,我从一个点画到一天的开始,在另一边从射线的点画。

我如何编写代码来重新计算?我还没有做过。

Вот начну искат как цена двигается-толко надо увидет ее-первая ест,но вторая 0:
price1 = NormalizeDouble(ObjectGet("Dn",OBJPROP_PRICE1),Digits);
price2 = NormalizeDouble(ObjectGet("Dn",OBJPROP_PRICE2),Digits);
Time_start - ето синяя вертикалная линия
double b3=iBarShift(Symbol(),0,Time_start);      
double b4=iBarShift(Symbol(),0,TimeCurrent());
ну и цикл поиска
for(int j = b4;j <= b3;j++){
Ну що искат,если я не вижу то,что ищу?
Застрял.
 
bond007:
....,他们怎么能发现这个问题呢???)
我只是不明白....,他们说你可以用EA进行交易,其他人说你不能 - 如果例如经纪公司允许使用EA,那么如何?我对EA的代码感兴趣,他们会发现?

经纪公司不能看到代码....他们只看到订单的强度和订单中的评论......。有一些DT禁止EA在终端工作......。这意味着当你把EA贴在图表上时,它就不会交易了...如果服务器设置不允许,你的经纪人会给你一个错误xxx或类似2013.01.18 22:45:03 '30xxxxx':禁止专家交易。



即,我不知道为什么我对代码如此担心?

 
hoz:

谢谢你,现在你会有胃口了 :)
对你来说是好事,逐渐从简单到复杂,你会把你的理解编成程序,这对编写任何程序来说都是必要的。好运!
 
mario065:

大家好。

我做了一个指标,它以45度画两条线。 当它相交时,我希望它是水平的。

那么,我如何计算交叉点呢?

我与前一天的低点/高点打成平局,通过一个点。

为了得到这样一条线,我从一个点画到一天的开始,在另一边从射线的点开始。

我如何编写代码来重新计算?我还没有做过。

为了帮助。
[Deleted]  
drknn:

你说的 "对数图 "是什么意思?请给我一个例子。例如,我只遇到过对数图表比例的概念。MT4终端已经有这个刻度。
我指的是对数刻度,我怎样才能在MT中找到它?我已经用了这么多年了,我不知道那里已经有什么了。
 
mario065:

大家好。

我做了一个指标,它以45度画两条线。 当它相交时,我希望它是水平的。

那么,我如何计算交叉点呢?

我与前一天的低点/高点打成平局,通过一个点。

为了得到这样一条线,我从一个点画到一天的开始,在另一边从射线的点画。

我如何编写代码来重新计算?我还没有做过。



伊戈尔-金的。

函数 CrossPointOfLines()

 

阿列克谢、阿尔特姆,谢谢你们。

我打算学习伊戈尔-金的功能。

 

所以我没有两个点,我只有一个点。

这里是Sors。

//+------------------------------------------------------------------+
//|                                                     TRIANGLE.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2013,mario"
#property link      ""

#property indicator_chart_window
extern string   TimeStart  = "Час за начало";
extern datetime Time_start = D'17.01.2013';
extern int      Days       = 1;
bool            New_Bar    = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){return(0);}
int deinit(){
   ObjectsDeleteAll(0,OBJ_TRENDBYANGLE);
   ObjectsDeleteAll(0,OBJ_VLINE);
   Comment("");return(0);}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  { 
   datetime New_Time,time_next,time_barh,time_barl;
   time_next = Time_start + Days*86400;
   datetime new_day = iTime(Symbol(),PERIOD_D1,0);
//+------------------------------------------------------------------+
   if(New_Time != new_day)                        
           {
           New_Time = new_day;                         
           New_Bar  = true;
           }
//+------------------------------------------------------------------+ 
//Шифтвам 
   double b1=iBarShift(Symbol(),0,Time_start);      
   double b2=iBarShift(Symbol(),0,time_next);
   double min = 3,max = 0;
   for(int i = b2;i <= b1;i++){
      if(iHigh(Symbol(),0,i)>max){ max=iHigh(Symbol(),0,i);time_barh = Time[i];}
      if(iLow (Symbol(),0,i)<min){ min=iLow (Symbol(),0,i);time_barl = Time[i];}
      }
   if(New_Bar == true){ 
      ObjectsDeleteAll(0,OBJ_TRENDBYANGLE);
      ObjectsDeleteAll(0,OBJ_VLINE);
      DrawLine("Start",0,Time_start,0,Time_start,0,0,0,2,Aqua,false);
      DrawLine("Up",3,time_barh,max,0,0,315.0,0,2,DeepSkyBlue,true);
      DrawLine("Up1",3,time_barh,max,Time_start,0,315.0,0,2,DeepSkyBlue,false);
      DrawLine("Dn",3,time_barl,min,0,0,45.0,0,2,Orange,true);
      DrawLine("Dn1",3,time_barl,min,Time_start,0,45.0,0,2,Orange,false);
    }
//+------------------------------------------------------------------+
   double spead = MarketInfo(Symbol(),MODE_SPREAD);
//+------------------------------------------------------------------+ 
   Comment("\nВреме на брокера: ",TimeToStr(TimeCurrent(),TIME_SECONDS),", Локално време: "+TimeToStr(TimeLocal(),TIME_SECONDS),
           "\nТекущ спред: ",DoubleToStr(spead/10,1),
           "\n min:        ",DoubleToStr(min,Digits),
           "\n max:       ",DoubleToStr(max,Digits)
           );
   return(0);
  }
//+------------------------------------------------------------------+
void DrawLine(string name,int lines,datetime time1,double value,datetime time2,double value1,double grd,int style,int wid,color col,bool ray)
{
   ObjectCreate(name,lines,0,time1,value,time2,value1);
   ObjectSet(name,OBJPROP_ANGLE,grd);
   ObjectSet(name,OBJPROP_COLOR,col);
   ObjectSet(name,OBJPROP_STYLE,style);
   ObjectSet(name,OBJPROP_WIDTH,wid);
   ObjectSet(name,OBJPROP_RAY,ray);
}
//+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 12.10.2007                                                     |
//|  Описание : Вычисляет координаты точки пересечения двух прямых.            |
//|             Каждая прямая задаётся парой координат своих точек.            |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    x - массив абсцисс              x[0], x[1] - первая прямая              |
//|                                    x[2], x[3] - вторая прямая              |
//|    y - массив ординат              y[0], y[1] - первая прямая              |
//|                                    y[0], y[1] - вторая прямая              |
//|    t - массив искомых координат    t[0]       - абсцисса                   |
//|                                    t[1]       - ордината                   |
//+----------------------------------------------------------------------------+
void CrossPointOfLines(double& x[], double& y[], double& t[]) {
  double z=(y[3]-y[2])*(x[1]-x[0])-(y[1]-y[0])*(x[3]-x[2]);
  ArrayResize(t, 2);
  ArrayInitialize(t, 0.0);

  if (z==0) Print("CrossPointOfLines(): Не удалось найти точку пересечения!");
  else {
    double xy1=x[1]*y[0]-x[0]*y[1];
    double xy2=x[3]*y[2]-x[2]*y[3];
    t[0]=NormalizeDouble((xy1*(x[3]-x[2])-xy2*(x[1]-x[0]))/z, 0);
    t[1]=(xy1*(y[3]-y[2])-xy2*(y[1]-y[0]))/z;
  }
}

代码本身非常简单。 但只有一个点。

 

谁知道为什么在可视化模式下,测试器中的DailyPivotPoints指标只显示所有日期的今天的数据?

如果可能的话,应该在其中加入什么,以显示历史上的内容?谢谢你!

 
lenalebedeva:
我是指具体的对数刻度,在MT中如何找到它?我已经用了这么多年,不知道那里已经有什么了。

P.S.

例如,你在图表上看一个过去的低点趋势,看到在图表的边缘,它甚至转移到了窗口之外的低点。你向下滚动图表到未来,看着图表自动向上移动,腾出空间来查看基础图表的蜡烛。而以前在图表窗口顶部可见的东西,现在移到了更高的位置,在图表窗口之外。这是在图表上实现了对数价格刻度。如果它不存在,你将不得不不仅向右向左滚动图表,而且还要向上和向下滚动。这就是为什么时间刻度是线性的,而价格刻度是对数的,以便于在图表窗口显示数据。

在过去,当计算机无法使用时,交易者使用毫米图,并在上面绘制价格以预测趋势和转折点。因此,在纸上有两个尺度--价格和时间。这是两个线性标尺。你能想象一张毫米级的纸得有多大,才能装下去年所有的十五分钟烛台?当然,它将和一个房间的墙壁一样大(如果不是更大)。因此,当你在屏幕上滚动图表时,你可以想象这样的模式:在墙上画了一个价格的蜡烛图。还有一个长方形(如红色)的框架--它是你的显示器。沿着图表移动,无非是沿着趋势移动这个红色矩形。但这样你就会说,你的显示器中的两个刻度都是线性的。这是真的,但只是部分的--请注意,当滚动图表时,原来大的蜡烛(视觉上被认为是大的)在稍微移动后,其大小会变小,尽管如果我们测量其极点之间的距离,点的数量保持不变。

看,这是同一图表的2张截图。第一张截图只是一个屏幕截图。第二张是同一屏幕的截图,但在旋转鼠标轮一圈后,图表已经向后移了几根蜡烛。拿一张纸,把它附在第一张截图上,用红色标记的蜡烛的高价和低价。然后将标记的风险移至第二张截图中的相同蜡烛。你会明白我们在谈论什么,以及什么是对数尺度的转变(这里的尺度使用不均衡的实质是什么)。

而你为什么要钻研对数尺度的细微差别呢?你希望在他们身上找到什么?