を含む2本の平行線間の距離を計算する! - ページ 3

 
Sergey Kolemanov:

あなたはHighとLowの間の距離をカウントしていますが、彼はラインを持っています。

平行線の話か。また、平行線では、どのバーでも垂直方向の距離は常に同じになります。この例では、線間の距離は(High[10]-Low[10]) です。このために時間を計算する必要は全くありません。

確認すれば、ずっと同じ結果になります。

より一般的な計算式はこちらで ご確認ください。

しかし、分足チャートでも分母が1に非常に近いので、簡略化すると

double R=(Price2-Price1);

この投稿で @Renat Akhtyamovが 既に述べていることです。

 
Sergey Kolemanov:
角度によって、距離は変わりますが...。では、両者の違いは何でしょうか?)
 
Itum:
角度によって、距離は変わりますが...。では、両者の違いは何でしょうか?)
角度によって、直角三角形ができるので、すべての距離が倍数で変化します。だから、どこで測ってもいいんです。最も単純な距離と思われるものを測ってください。
 
Renat Akhtyamov:
角度によって、直角三角形ができるので、すべての距離が倍数で変化します。だから、どこで測ってもまったく問題ない。最も単純な距離と思われるものを測ってください。

例を示してください。

 ObjectCreate("Line1",OBJ_TRENDBYANGLE,0,Time[0],High[10],Time[10],Low[10]);
   ObjectSetInteger(0,"Line1",OBJPROP_STYLE,STYLE_SOLID);
   ObjectSetInteger(0,"Line1",OBJPROP_COLOR,Red);
   ObjectSetInteger(0,"Line1",OBJPROP_WIDTH,2);
   
   ObjectCreate("Line2",OBJ_TRENDBYANGLE,0,Time[10],High[100],Time[20],Low[10]);
   ObjectSetInteger(0,"Line2",OBJPROP_STYLE,STYLE_SOLID);
   ObjectSetInteger(0,"Line2",OBJPROP_COLOR,Lime);
   ObjectSetInteger(0,"Line2",OBJPROP_WIDTH,2);

   ObjectSetDouble(0,"Line1",OBJPROP_ANGLE,260); // 85 
   ObjectSetDouble(0,"Line2",OBJPROP_ANGLE,260); // 85
/*   
   ObjectCreate("Value",OBJ_TREND,0,Time[0],High[10],Time[10],High[10]);
   ObjectSetInteger(0,"Value",OBJPROP_RAY,false);
   ObjectSetInteger(0,"Value",OBJPROP_COLOR,Gold);
   ObjectSetInteger(0,"Value",OBJPROP_WIDTH,3);
   */

// Предлагали сделать так и не помогает !

   double V = (ObjectGetDouble(0, "Line1", OBJPROP_PRICE, 0)-ObjectGetDouble(0, "Line2", OBJPROP_PRICE, 0))/((datetime)ObjectGetInteger(0, "Line1", OBJPROP_TIME, 0)-(datetime)ObjectGetInteger(0, "Line2", OBJPROP_TIME, 0));
   double R = (ObjectGetDouble(0, "Line1", OBJPROP_PRICE, 0)-ObjectGetDouble(0, "Line2", OBJPROP_PRICE, 0))/sqrt(1+V*V) ; 
   
   
   Comment("Разница: R=",R, " | ");

// Предлагали сделать и так и также не помогает !
   
   datetime t1 = (datetime)ObjectGetInteger(0, "Line1", OBJPROP_TIME, 0);
   datetime t2 = (datetime)ObjectGetInteger(0, "Line2", OBJPROP_TIME, 0);
   double p1 = 0;
   double p2 = 0;
   
   if(t1 > t2)
   {
      p1 = ObjectGetValueByTime(0, "Line1", t2);
      p2 = ObjectGetDouble(0, "Line2", OBJPROP_PRICE, 0);
   }
   if(t1 < t2)
   {
      p1 = ObjectGetDouble(0, "Line1", OBJPROP_PRICE, 0);
      p2 = ObjectGetValueByTime(0, "Line2", t1);;
   }
   if(t1 == t2)
   {
      p1 = ObjectGetDouble(0, "Line1", OBJPROP_PRICE, 0);
      p2 = ObjectGetDouble(0, "Line2", OBJPROP_PRICE, 0);
   }
   
   Comment("Разница: " + DoubleToString(MathAbs(p1 - p2) / _Point, 0));
 
Itum:
角度によって、距離が変わる...線の違いは何ですか?)

平行な2本の直線の距離を求める必要がありますが、スケールを変えても値が変わらなければ、大きさは問わないのでしょうか?

ちゃんと理解できたかな?もしそうなら、値をチェックするコードを教えてください。私ではうまくいって値が変わらないので、あなたではうまくいかないのです。

 
Itum:

例を示してください。

double Расстояние=ObjectGetValueByShift("Line1",0)-ObjectGetValueByShift("Line2",0);
つまり、Line1が上、Line2が下であれば
 
Renat Akhtyamov:
つまり、Line1が上、Line2が下であれば
 
Itum:

もし、あなたがその下に持っているものの代わりに、私のラインを試してみてください。

// Предлагали сделать так и не помогает !

これが青線の長さになります。


 

Renat Akhtyamov:

double Расстояние=ObjectGetValueByShift("Line1",0)-ObjectGetValueByShift("Line2",0);

うーん...。あのね、どっちもどっちなんだけどね ) ...上記の私のコードを実行してみると...。望むような結果にはならない。

私の説明不足かもしれませんが。

 
Renat Akhtyamov:

もし、あなたがその下に持っているものの代わりに、私のラインを試してみてください。

これが青線の長さになります。


そうなんです.長さが欲しい。 赤い線 もし、この2本の平行線が垂直だったら、青い線はどうなるのでしょう?(角度が違えば、長さも違う)

白いシートに10cm間隔で2本の平行線を引くと(Fig.7)、このシートは好きな角度にねじっても、同じ10cmのままです(Fig.6)。