[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 370

 
TarasBY:

このセリフについて。

最近、DTはシンボル名に異なる接頭辞を付けることが多く(例えばEURUSDm)、シンボルの市場環境を参照する際にはこれらを考慮する必要があります。

追記 ...また、標準的な "EURUSD" の場合、StringSubstr ("EURUSD", 6) はゼロではなく "" となります。

イゴールさん、どうもありがとうございます!DTと手紙のことは知りませんでした。ムのミニアカウントかもしれません。

JPYの 係数82がどこにあるか知っていますか? 他の通貨では、GBPは 0.625EURは 0.7751937984 でした。

通貨を 換算するときに、レートが変わると係数が変動してしまうというものです。では、なぜ定数を取るのでしょうか?
 
Chiripaha:

ニコライ 君がプログラミングを学び、プログラムを作るのはとてもいいことだ。でも、要は、プログラムの中の特定の曖昧なケースについて助けを求めたのではなく、実際にプログラムを書くためのTORを概説したのです。

私が思うに、この展示物は、ロボットに例えると、異質なスペアパーツの山です。まったくもっておかしい。

つまり、すべてはまったく別の方法でやり直す必要があるため、ここで具体的なエラーを指摘することはできないのです。- IMHOは、それ以上のことをふりかざすことはないのです。

しかし、だからといって、動揺する必要はない。書き方を学び続けること。そこに、彼らが言うように、あなたの代わりに、もちろん、(仕事をするために) "食べる "ことができますが、あなた自身は、この(すなわち、学習しない)から十分に供給されるようになっていません。では、どうぞ。もし、他の道を歩けば、その道は旅に出ることになる。

問題に対するアプローチを変えて、もう一度書いてみてください。- 私には効果がありました。


講評をありがとうございました。教えてください、それは現実的に実行可能なのでしょうか?
 
NICK_R:
講評をありがとうございました。全く現実的ではないのでしょうか?

もちろん、そうです。しかし、それは決して簡単なことではありません。すごく難しいわけではないけど、簡単でもない。- 勉強するのにちょうどいいんです。
 
Chiripaha:

イゴールさん、どうもありがとうございました!DCと手紙の件は知りませんでした。ミニアカウントでなければならない-「m」の字のために。

あなたはJPYが 82の 係数を持っている場所を知っていますか? 他の通貨は、GBP-0.625ユーロ-0.7751937984を持って いた。

通貨を変換するときに、為替レートの変化に応じて係数が変動するというものです。では、なぜ定数を取るのでしょうか?

セルゲイ その数字には意味がないから、答えようがないんだ。

また、記号の書き方における接頭辞は、意味がある場合とない場合がある。

 
TarasBY:

セルゲイ この数字には何の意味もないから、この質問には答えられない。

また、記号の書き方における接頭辞は、意味がある場合とない場合がある。

OKです。ありがとうございました。
 

皆さん、こんにちは。

ループから逃れる方法を教えてください(コード内で赤くハイライトされています)。インジケータがひどく減速している。

#property  indicator_separate_window
#property  indicator_buffers 2
#property  indicator_color1  DarkGray
#property  indicator_color2  PowderBlue
#property  indicator_width1  2

//---- basic fan indicator parameters

extern bool Show_AOLine_2=true;
extern int SlowEMA3=34;
extern int EMA=3;
extern bool Show_Volume=true;
extern double coaf=0.5;
//---- indicator buffers
double AOBuffer3[];
double ExtMapBuffer1[];

    double  price_up_start, price_up_end, AO_up;
    double  price_dn_start, price_dn_end, AO_dn;
    datetime time_up, time_dn, AO_time_up, AO_time_dn;
    double Vol_AO_up, Vol_AO_dn;
    int shift_up, shift_dn, dn_koaf, up_koaf, dn_koaf_round, up_koaf_round;
    
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   //---- drawing settings
   
  string name_ind = "Awesome_super_volumes";
   IndicatorShortName("Awesome_super_volumes");
   
   
//---- AO_fan line 2 (basic)
   if(Show_AOLine_2 ==true){Show_AOLine_2=DRAW_LINE; }
   else 
    {Show_AOLine_2=DRAW_NONE; }
   SetIndexBuffer(0,AOBuffer3);
   SetIndexStyle(0,Show_AOLine_2);
   SetIndexLabel(0,"basic line");   

   SetIndexBuffer(1,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_HISTOGRAM);
   SetIndexLabel(1,"Volume");
   
  //---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Awesome Oscillator                                               |
//+------------------------------------------------------------------+
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;

   for(int i=0; i<limit; i++)   // -------------------------------------------- Основной цикл
   {
     
 //---- Awesom + Volumes
     
AOBuffer3[i]=iMA(NULL,0,EMA,0,MODE_SMA,PRICE_MEDIAN,i)-iMA(NULL,0,SlowEMA3,0,MODE_SMA,PRICE_MEDIAN,i);
if (Show_Volume==true)
{
double nSum = Volume[i]*Point*coaf;
   if (AOBuffer3[i]<=0)ExtMapBuffer1[i] = nSum;
   if (AOBuffer3[i]>0)ExtMapBuffer1[i] = -nSum;
double Vol_Arr[];
  if (AOBuffer3[i]<=0)Vol_Arr[i]=Volume[i]*Point*coaf;
  if (AOBuffer3[i]>0)Vol_Arr[i] = -Volume[i]*Point*coaf;
}

//----------------------------- Блок поиска значений -----------------------------------------//
 
 //-- Поиск Low & Time & Min_AO 
  if (AOBuffer3[i] < 0)
  {
 price_up_end = 0; AO_up = 0;  
 price_dn_start = Low[i]; if (price_dn_end == 0) price_dn_end = Low[i]; 
 if (price_dn_start <= price_dn_end) {price_dn_end = price_dn_start; time_dn = Time[i]; shift_dn = iBarShift(NULL, 0, time_dn);}
 if (AOBuffer3[i] <= AO_dn) {AO_dn = AOBuffer3[i]*0.2+AOBuffer3[i]; AO_time_dn = Time[i];}
 dn_koaf=dn_koaf_round;
 up_koaf_round++;
  }   
  
  //-- Поиск High & Time & Max_AO  
  if (AOBuffer3[i] > 0)
   {
  price_dn_end = 0; AO_dn = 0;  
  price_up_start = High[i];
  if (price_up_start >= price_up_end) {price_up_end = price_up_start; time_up = Time[i]; shift_up = iBarShift(NULL, 0, time_up);}
  if (AOBuffer3[i] >= AO_up) {AO_up = AOBuffer3[i]*0.2+AOBuffer3[i]; AO_time_up = Time[i];}
  up_koaf=up_koaf_round;
  dn_koaf_round++;
   }   
 //--------------------------------- Выставляем значения --------------------------------------------//
    
   Vol_AO_up = 0; Vol_AO_dn = 0;
  if (shift_up > shift_dn)
    {
 for (int dn_br = shift_dn; dn_br <= shift_up; dn_br++)            //-------------- Перебор значений внутри основного цикла
          {
    Vol_AO_up += Volume[dn_br]; 
    SetText("Awesome_super_volumes"+up_koaf, DoubleToStr(Vol_AO_up,0), AO_time_dn, AO_dn, Blue);
          }   
  }
 
 if (shift_dn > shift_up)
    {
 for (int up_br = shift_up; up_br <= shift_dn; up_br++)            //-------------- Еще один перебор значений внутри основного цикла
          {
    Vol_AO_dn += Volume[up_br]; 
    SetText("Awesome_super_volumes"+dn_koaf, DoubleToStr(Vol_AO_dn,0), AO_time_up, AO_up, Red);
          }   
    }
 } 
           
//---- done

   return(0);
  }
//+------------------------------------------------------------------+
void SetText(string name, string Vl, datetime t1, double p1, color c)
 {
  ObjectCreate(name,OBJ_TEXT,WindowFind("Awesome_super_volumes"),0,0,0,0);
  ObjectSetText(name, Vl, 6, "Arial Black", c);
  ObjectSet(name, OBJPROP_TIME1 , t1);
  ObjectSet(name, OBJPROP_PRICE1, p1);
  ObjectSet(name, OBJPROP_COLOR, c); 
  }

ありがとうございました。


 
Fox_RM:

皆さん、こんにちは。

ループから逃れる方法を教えてください(コード内で赤くハイライトされています)。インジケータがひどく減速している。

ありがとうございました。

それでも、この、もしかしたらくだらないかもしれませんが、アイデアを出します。でも、もっとセンスのいいものを思いつくかもしれませんね。

タスクに関する限り、最終的な検索にはいくつかのバーのデータが必要で、最初の検索ではデータの値をいくつかの配列(またはバッファ - 私はあまり得意ではありません)に書き込む必要があります。

そして、1回目の検索が終了したら、この配列(バッファ)から必要な値を取り出して、2回目の検索のためのデータを取得します。

ただ、これがスピードにつながるかどうかは特にわかりません。でも、ブレーキの原因については私もよく知らないんです。この点で、これ以上適格なことを言うのは難しい。

何が長所と短所となり得るか。マイナス面は、この場合、オンラインではなく、データがすでに役に立たないような事後的なバーでの状況を推定することです。でも...というのは、実は、古いデータを再計算すると、もうオンラインでは必要なくなる、ということで相殺されます。そして、実際に現在のデータが到着すると、すぐに2番目の列挙で処理されます。だから、この場合、関連性が失われることはないはずだ。そしてさらに、「オーバーシュートのオーバーシュートを解消する」という課題も解決してくれるでしょう。: ))

何か見落としているかもしれません。私の考えを批判的に受け止めてください。まあ、それに一番の評論家は練習ですからね。何がどのように機能するのか、書いて再確認すればいいのです。そうだと思います。

 

AとBの制御点の取得方法が若干異なるだけで、実質的には違いはありません。すでに配列で試しています。

そうすると、AとBの間でも、小節をループさせなければなりません。他に方法がないから聞いているんです。

誰かヒントをくれないかな。もしかして、コード書きのロジックに問題があるのでは?

 
Fox_RM:

AとBの制御点の取得方法が若干異なるだけで、実質的には違いはありません。すでに配列で試しています。

そうすると、AとBの間でも、小節をループさせなければなりません。他に方法がないから聞いているんです。

誰かヒントをくれないかな。もしかして、コード書きのロジックに問題があるのでは?

そうです、その通りです。どうせオーバーフローでループをしなければならないのですから。だから、避けては通れないのです。そして、ほとんどの場合、この質問は、「何が原因で、どうすればブレーキングを解消できるのか」という、別の問いかけになるはずです。
 
Fox_RM:

皆さん、こんにちは。

ループから逃れる方法を教えてください(コード内で赤くハイライトされています)。インジケータがひどく減速している。

ありがとうございました。

この場所でインジケータをグループ化することができます - インジケータの小さな最適化が行われます。

if (Show_Volume==true)
{
double nSum = Volume[i]*Point*coaf;
   if (AOBuffer3[i]<=0)ExtMapBuffer1[i] = nSum;
   if (AOBuffer3[i]>0)ExtMapBuffer1[i] = -nSum;
double Vol_Arr[];
  if (AOBuffer3[i]<=0)Vol_Arr[i]=Volume[i]*Point*coaf;
  if (AOBuffer3[i]>0)Vol_Arr[i] = -Volume[i]*Point*coaf;
}

このように

if (Show_Volume==true)
{
 double nSum = Volume[i]*Point*coaf; double Vol_Arr[];  // Не знаю в этом случае можно через запятую переменные прописывать? - double nSum = Volume[i]*Point*coaf, Vol_Arr[];

 if (AOBuffer3[i]<=0) {ExtMapBuffer1[i] =  nSum; Vol_Arr[i] =  Volume[i]*Point*coaf;}
 if (AOBuffer3[i]>0)  {ExtMapBuffer1[i] = -nSum; Vol_Arr[i] = -Volume[i]*Point*coaf;}
}

これです。

AO_dn = AOBuffer3[i]*0.2+AOBuffer3[i];
// и тут
AO_up = AOBuffer3[i]*0.2+AOBuffer3[i];

に変更することができます。

AO_dn = AOBuffer3[i]*1.2;
     // и
AO_up = AOBuffer3[i]*1.2;

それから、インジケーターに「テキスト」が溜まっているんですね。新しいテキストを配置する前に、古いテキストを削除する必要があります。これが原因で、インジケーターが本当に遅くなることがあるんです。選 択したパラメータの目盛りの数だけ、このテキストが表示 されるからです。

もし、どなたかこのことをコードに実装するのに最適な方法を教えていただければ - 私自身、同様のコーディングの助けを求めているのですから。