どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 790

 
Forexman77:

疑問が解消されたわけではありません。では、まず最初に。

最大値を見つけ、それに対して直線をプロットする。この最大線と現在の最小線との距離がチェックされる。Rmax "を超えると、最大値を示すバー上に矢印が設定されます。矢印は配置されているが、そこにはない。わかりやすくするために、差分を示すバッファ「BufferLow[i]」を追加し、そのデータはエクスプローラウィンドウで確認できるようにしました。

いつもそうなんです。冬は雪を待てない)自分でやりました。

そんな似たような発想に苛まれた人がいたら、ここにそのコードがある。

#property copyright "Kamil Gazizullin"
#property link      "forexman77@yandex.ru"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 5
#property  indicator_color1 Magenta
#property  indicator_color2 Aqua
#property  indicator_color3 SlateBlue
#property  indicator_color4 SlateBlue
#property  indicator_color5 clrNONE
//--- input parameters
extern int       Period_=10;
extern double diapazon  =0.003;
//--- buffers
double Max[];
double Min[];
double MaxIndex[];
double MinIndex[];
double rAZNOST[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers(5);
   SetIndexBuffer(0,MaxIndex);
   SetIndexBuffer(1,MinIndex);
   SetIndexStyle(0,DRAW_ARROW);
   SetIndexArrow(0,116);
   SetIndexEmptyValue(1,0.0);
   SetIndexStyle(1,DRAW_ARROW);
   SetIndexArrow(1,116);
   SetIndexEmptyValue(0,0.0);
   SetIndexBuffer(2,Max);
   SetIndexBuffer(3,Min);
   SetIndexBuffer(4,rAZNOST);
   IndicatorDigits(Digits+1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
    int counted_bars=IndicatorCounted(),limit, i,k,r,p,t,f;
    double minimum,maximum,Dmax,Dmin;
   if(counted_bars>0)
      counted_bars--;  
   limit=Bars-counted_bars;
   for(i=0;i<limit;i++)
   {
      maximum=High[iHighest(NULL,0,MODE_HIGH,Period_,i)];
      minimum=Low[iLowest(NULL,0,MODE_LOW,Period_,i)];
      Max[i]=maximum;
      Min[i]=minimum;
   }
   for(i=0;i<limit;i++)
   {
      k=iHighest(NULL,0,MODE_HIGH,Period_,i);
      t=iLowest(NULL,0,MODE_LOW,Period_,i);
      Dmax=Max[i]-Low[i];
      Dmin=High[i]-Min[i];
      if (Dmax > diapazon){p=k;for(r=p;r>=k;r--)MaxIndex[k]=Max[k];}
      if (Dmin > diapazon){p=t;for(f=p;f>=t;f--)MinIndex[t]=Min[t];}
      if (MaxIndex[i]==Max[i+1])MaxIndex[i]=0;
      if (MinIndex[i]==Min[i+1])MinIndex[i]=0;
      rAZNOST[i]=Max[i]-Min[i];
   }
   return(0);
  }
 
Awwl:

内蔵のHeiken Ashiは少し物足りない感じですが(745の私だけかな?)、仕組みは明確です。そして、WmiForがどのように構築されているかは不明です

Heiken Ashi コードでは、4 本のバーのヒストグラムからローソク足が描画されます。

つまり、バッファの数が増える(0から3まで)と、新しいバーが古いバーの上に描かれる。順番は以下の通りです。

LowHigh - HighLow - Open - Close。

燭台の順番は、胴と尾のある、正しい外観を得るために、以下のようにします。

max(Open,Close)//thick color line// - min(Open,Close)//thick white// - High//thick color line// - Low//thick white//.

このインジケータをコンパイルして、チャートに貼り付けて、すべての問題点を見てみましょう(写真参照)。

しかし、この方法は、Heiken Ashiと同様に、欠点があります - 各「ろうそく」の下に、我々は、より低いすべてをカバーする背景色の白いループを取得します。しかし、WmiForを使えば、すべてが完璧です。文書化されていない機能

1枚目:Heiken Ashi(別ウィンドウに配置)、2枚目:WmiFor、背景はわかりやすいように薄緑色にしています。

柔らかいものと丸いものを比較しているのですが?チャートウィンドウでローソク足として描画し、シャドウとボディを表示するように設計されているのに、なぜ別ウィンドウで表示するのですか?また、古いバーの上に新しいバーが描かれることはありません。 バッファーの値が変更されると、同じバーのサイズが変わり、その上に新しいバーが描かれることはありません。

MT4にはローソク足の形で描画する方法がないので、ヒストグラムしかできませんが、そこでバッファ値をどう計算するかはご自身の判断になります。ちなみにWmiForもヒストグラムを描画します。 こちらも別ウィンドウにして不具合とにらめっこしましょう )))

別ウィンドウのローソク足を、影のあるローソク足に見せるには、アクセラレータのように相対的に0を描画する必要があります。また、All_Starsなどの ようにオブジェクトとして描画することもできます。

 

皆さん、こんにちは。

私の頭は朦朧としています。ドキュメントには答えが見つかりませんでしたが、もしかしたら誰かが遭遇したのかもしれません。こちらはExpert Advisorのライン(正取引の割合)です。

Print(OderPluseCount,"/",OderTotal,"=",DoubleToStr((OderPluseCount/OderTotal),2),"=",BestOd,",2/5*100,",100*2/5) を実行します。

ジャーナルにプリントする(例)。

3/6=0.00=0 0 40

同時に、解答が1であれば、1.

3/3=1.00=1 0 40

変数BestOd=OderPluseCount/OderTotalはdouble型、それ以外はint型です。

つまり、1より小さい値に出会うとすぐに、コンパイラはそれを自動的に0に変えてしまう...。定数による最後の2つの式は、意外な結果をもたらします。)

様々な置換を試しましたが、1より大きいものはすべて正しい分数部分を持って います。

 
Igor_:

皆さん、こんにちは。

私の頭は朦朧としています。ドキュメントには答えが見つかりませんでしたが、もしかしたら誰かが遭遇したのかもしれません。こちらはExpert Advisorのライン(正取引の割合)です。

Print(OderPluseCount,"/",OderTotal,"=",DoubleToStr((OderPluseCount/OderTotal),2),"=",BestOd,",2/5*100,",100*2/5) を実行します。

は、それをジャーナルにプリントする(例)。

3/6=0.00=0 0 40

同時に、解答が1であれば、1.

3/3=1.00=1 0 40

変数BestOd=OderPluseCount/OderTotalはdouble型、それ以外はint型です。

つまり、1より小さい値に出会うとすぐに、コンパイラはそれを自動的に0に変えてしまう...。定数による最後の2つの式は、意外な結果をもたらします。)

様々な置換を試しましたが、1より大きいものはすべて正しい分数部分を持っています。

お試しください

DoubleToStr((double)(OderPluseCount/OderTotal),2)を指定します。

 
AlexeyVik:

お試しください

DoubleToStr((double)(OderPluseCount/OderTotal),2)を指定します。

役にたたない。でも、ありがとうございます )
 
Igor_:
役に立ちません。でも、ありがとうございます )
DoubleToStr((double)(OderPluseCount/(OderTotal*1.0)),2)を使用する。
 
Vinin:
DoubleToStr((double)(OderPluseCount/(OderTotal*1.0)),2)を使用する。

このように動作します、ありがとうございました。シャーマニズムのようだ )))

正直なところ、表示ではなく、BestOdの 計算が正しいかどうかの方が心配です。それも修正しなければならなかった。

私はこのようにしました。

BestOd=(OderPluseCount/(OderTotal*1.0))とする。

これには何か説明があるのでしょうか?何しろ、プリントでなければ、このエラーをキャッチするのは非常に難しいのです。どのような場合に発生する可能性があるのでしょうか?

 
Igor_:

このように動作します、ありがとうございました。シャーマニズムのようだ )))

正直なところ、表示ではなく、BestOdの 計算が正しいかどうかの方が心配です。それも修正しなければならなかった。

私はこのようにしました。

BestOd=(OderPluseCount/(OderTotal*1.0))とする。

これには何か説明があるのでしょうか?何しろ、プリントでなければ、このエラーをキャッチするのは非常に難しいのですから。どのような場合に飛び出すのでしょうか?

整数値での演算では、結果は整数になります。
 

参考書の「型変換」の項で、自分で答えを見つけました。

Если два значения объединяются бинарным оператором, то перед выполнением операции операнд младшего типа преобразовывается к более старшему типу в соответствии с приоритетом, указанным на схеме: 

しかし、この方式ではタイプダブルが最も上位となる。そして、私は両方のintを持っていました。したがって、結果は整数になります。より高い型(double, float)の定数を導入し、すべてのint型をそれに変換した。

長い間、ドキュメントを参照しながら勉強するのです)))

 
こんにちは、以下の質問をさせていただきます。
オープンポジションを 修正するEAを作るにはどうしたらよいでしょうか?どうにかして「油を塗る」必要があるのです。
何も思いつきません。
ぜひともお願いしたい。