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

 
artmedia70:
配列の大きさは0である。ArrayResize() を忘れずに、あるいは配列に適切なサイズを設定してください。
ありがとうございます。私は別の方法で、インジケータでArrayMaximum() を見つけ、iCustomを通してExpert Advisorにその値を渡しました :)
 
こんにちは。私は、外部DLLからの 呼び出しを使用するスクリプトを持っています。毎日決まった時間に稼働させる必要があるのですが?
 

こんにちは。

写真はイメージです。

まずボリュームを表示させ、マネーフロー指標(10)を一番上に表示させます。

別のインジケータを 作り、もう一度Volumeを取り、Volumeでmouwingを再計算し、最初のウィンドウのように25%、50%、75%でやってみたのです。

私のやり方でやってみたのですが、うまくいきませんでした。

もし、この件で問題があった方がいらっしゃいましたら、ご意見をお聞かせください。

感謝

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_minimum 0

#property indicator_width1 2
#property indicator_width2 2
#property indicator_color1 DodgerBlue
#property indicator_color2 Yellow

extern int MAPeriod = 30;
double     volum[],ma[];
//+------------------------------------------------------------------+
int init(){
    int bars_count=WindowBarsPerChart(),volh;
    int bar=WindowFirstVisibleBar();
    volh = Volume[iHighest(Symbol(),0,MODE_VOLUME,bar,0)];
    SetIndexBuffer(0,volum);
    SetIndexBuffer(1,ma);
    SetIndexStyle(0,DRAW_HISTOGRAM);
    SetIndexStyle(1,DRAW_LINE);
    SetLevelValue (0,   volh*1.05); 
    SetLevelValue (1, ((volh*1.05)/100)*75.0); 
    SetLevelValue (2, ((volh*1.05)/100)*50.0);
    SetLevelValue (3, ((volh*1.05)/100)*25.0); 
    return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
/*int start(){
    int limit;
        limit = Bars-IndicatorCounted()-1;
    for(int i=limit;i>=0;i--){
        volum[i] = NormalizeDouble(Volume[i],0);
        ma[i]    = NormalizeDouble(iMAOnArray(volum,0,MAPeriod,0,MODE_SMA,i),0);
       }
   return(0);
  }*/
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
    int i=rates_total-prev_calculated-1;
    if(i<0)
       i=0; 
    while(i>=0){
      if(i<rates_total-1)
        volum[i] = NormalizeDouble(Volume[i],0);
        ma[i]    = NormalizeDouble(iMAOnArray(volum,0,MAPeriod,0,MODE_SMA,i),0);
        i--;
       }     
   return(rates_total);
  }
 
tara:
マイナス2小節のことである。そして、限界値の平均値。私をバカにしたいのでしょう。俺なら「くたばれ」と言うね、わかるだろ?)
ベラルーシという国がないことをまだ知らない小学2年生、中学1年生が、1年生とコチェツァのところにやってきました。そして、どんな質問に対しても、ただ「勉強しなさい」と送ったり、諭したりするのです。ドアの上にある、どの支店にいるのかをよく読む必要があります。まだアルファベットを覚えたばかりなので、あまり興奮しないでください、どうせ理解できませんから。
 

そして、evilliveと artmedia70に 大感謝です。お待たせしました。きっと、私だけの意見ではないはずです。このスレッドに来る人はみんな助けを求めていて、ほとんどあなたから助けを得ているのです。ありがとうございました。

 

こんにちは、プロフェッショナルの皆様、久しぶりのご連絡です

ポイントは、2つのmuwksが交差するExpert Advisorがあり、誰も注文を開くことに悩まされないということです。

void Trade()

{ double ma_fast=ma(Period_,Shift_,Method_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0) となります。

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt))。

{

if(sumSO>0 && !ClosePos(OP_SELL)) return;

if(MO(OP_BUY,GetLot(),GetComment())==-1) return;

if(!ModifyByTicket(T))リターン。

NumbUp=0、NumbDn=0。

}

さもなくば

などなど...。

すなわち、距離が交差した場合、オーダーをオープンする

最後に交差した時刻を求めるコードが必要です ...

そして、現在から履歴の時間まで、一定期間内の注文を検索し、見つからなければ注文を開始します。

この目的のためにトレーサーインジケータのコードを調査したところ、すべてクリアしているようです。

しかし、私はそれが最も右のものであるように曲線交差の後の最初のバーをタイミングを合わせる方法がわからない。

フォルテのオペレーターが必要だと感じているが、形にすることができない

 
evillive:

これではいけない。3つのバッファすべてについてiCustomを呼び出し、それぞれの値をそれ自身の変数に書き込み、そしてこれらの値で好きなことをします。

ボリンジャーストリップについては、ヘルプの例によると、2本目のバーについては、選択を解除する必要はないようです。

ありがとうございます。

しかし、文盲のため、いつもマニュアルに目を通しているのですが、次のように掘り出しました:カスタムインディケータは、作者のアルゴリズムに従って書かれたプログラムである。そして、チュートリアルでは、iCustomは指定されたカスタムインジケータの 値を返すと書かれています。

しかし、私はカスタム(つまり私の理解では、私が開発した)インディケータを使用していません。

移動平均、ボリンジャーバンド、ストキャスティックオシレーターの標準的な指標を、私が指定したパラメータで取得する必要があるのですが、どうすればいいですか?もちろん、私は「直感」で、最初に見つけたものを適用しています。 しかし、あなたの提案したバリエーションは、私には適さないように思えます。

バッファや配列やループを使わないで解決する方法はないのでしょうか?その中で私は海に沈む玉石のように、一気に沈んでしまうのです。

 
sannin:

こんにちは、プロフェッショナルの皆様、久しぶりのご連絡です

ポイントは、2つのmuwksが交差するExpert Advisorがあり、誰も注文を開くことに悩まされないということです。

void Trade()

{ double ma_fast=ma(Period_,Shift_,Method_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0) となります。

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt))。

{

if(sumSO>0 && !ClosePos(OP_SELL)) return;

if(MO(OP_BUY,GetLot(),GetComment())==-1) return;

if(!ModifyByTicket(T))リターン。

NumbUp=0、NumbDn=0。

}

さもなくば

などなど...。

つまり、距離が交差する場合、オーダーを開く

最後に交差した時刻を求めるコードが必要です ...

そして、現在から履歴の時間まで、一定期間内の注文を検索し、見つからなければ注文を開始します。

この目的のためにトレーサーインジケータのコードを調査したところ、すべてクリアしているようです。

しかし、私はそれが最も右のものであるように曲線交差の後の最初のバーをタイミングを合わせる方法がわからない。

フォルテのオペレーターが必要だと感じているが、形にすることができない

このExpert Advisorは交差点で動作するものではありません。基準は次の通りです:速いМАが遅いМАよりXピップス高く、オープンポジションが ない場合、マーケットでそれを開きます。

クロスを見つけるには、クロスの前の「高速/低速MA」とクロスの後の「高速/低速MA」の2つの値を常に取り、いわば入れ替わるタイミングを見つける必要があります。言い換えれば

if(FastMA_2<SlowMA_2 && FastMA_1>SlowMA_1) - 1小節目と2小節目の間で速いМАが遅いМАを下から上へと横切った。

無限ループの場合、ゼロバーからクロスの検出までX+1バーとなり、Xバーの時間、つまりクロス後の直近のバーが必要です。

 
rapid_minus:

ありがとうございます。

しかし、文盲のため、いつも教科書を掘り起こすことになるのだが、これが掘り出したもので、カスタムインディケーターとは、作者のアルゴリズムに従って書かれたプログラム...なのだ。そして、チュートリアルでは、iCustomは指定されたカスタムインジケータの 値を返すと書かれています。

しかし、私はカスタム(つまり私の理解では、私が開発した)インディケータを使用していません。

移動平均、ボリンジャーバンド、ストキャスティックオシレーターの標準的な指標を、私が指定したパラメータで取得する必要があるのですが、どうすればいいですか?もちろん、私は「直感」で、最初に見つけたものを適用しています。 しかし、あなたの提案したバリエーションは、私には適さないように思えます。

バッファや配列やループを使わないで解決する方法はないのでしょうか?その中で私は海に沈む玉石のように、一気に沈んでしまうのです。

そうですね、ボリンジャーバンドを使う場合はiCustomを呼び出す必要はなく、iBandsは各インジケーターのラインごとに呼び出す必要がありますね。インジケータを呼び出さない(「バッファ、配列、ループを使用しない」)別の方法は、エキスパートアドバイザーにこのインジケータの計算アルゴリズムを実装し、必要なときに目的の値を読み取ることです(例えば、ボトムラインのみなど、目的の値のみを読み取ることも可能です)。しかし、完全にループや配列のないすべて同じでは動作しません。
 
sannin:

こんにちは、プロフェッショナルの皆様、久しぶりのご連絡です

ポイントは、2つのmuwksが交差するExpert Advisorがあり、誰も注文を開くことに悩まされないということです。

void Trade()

{ double ma_fast=ma(Period_,Shift_,Method_MA_,Apply_to_,0), ma_slow=ma(Period__,Shift__,Method_MA__,Apply_to__,0) となります。

if(sumBO==0 && ma_fast>ma_slow && (!Use_Distance || (Use_Distance && ND(ma_fast-ma_slow)>Distance*Pnt))。

{

if(sumSO>0 && !ClosePos(OP_SELL)) return;

if(MO(OP_BUY,GetLot(),GetComment())==-1) return;

if(!ModifyByTicket(T))リターン。

NumbUp=0、NumbDn=0。

}

さもなくば

などなど...。

つまり、距離が交差する場合、オーダーを開く

最後に交差した時刻を求めるコードが必要です ...

そして、現在から履歴の時間まで、一定期間内の注文を検索し、見つからなければ注文を開始します。

この目的のためにトレーサーインジケータのコードを調査したところ、すべてクリアしているようです。

しかし、私はそれが最も右のものであるように曲線交差の後の最初のバーをタイミングを合わせる方法がわからない。

フォルテのオペレーターが必要だと感じているが、形にすることができない

ここでは、2つのミューを越えてから小節を計測する例を示しました。
datetime TimeStart = 0;
//+------------------------------------------------------------------+
int init(){return(0);}
int deinit(){return(0);}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int f;
   bool     cu1     = false;
   bool     cu2     = false;
   double   ma_1    = iMA(NULL,0,31,0,MODE_SMA,PRICE_OPEN,0);
   double   ma1     = iMA(NULL,0,11,0,MODE_SMA,PRICE_OPEN,0);
   double   ma_2    = iMA(NULL,0,31,0,MODE_SMA,PRICE_OPEN,1);
   double   ma2     = iMA(NULL,0,11,0,MODE_SMA,PRICE_OPEN,1);

   if(ma2<ma_2 && ma1>ma_1)
      TimeStart=Time[0]; 
   if(ma2>ma_2 && ma1<ma_1)
      TimeStart=Time[0];
   if(ma1>ma_1)
      cu1=true;
   if(ma1<ma_1)
      cu2=true;

   if(cu1==true || cu2==true)  
      int b1=iBarShift(Symbol(), PERIOD_H1, TimeStart);      
      int b2=iBarShift(Symbol(), PERIOD_H1, TimeCurrent());

    for(int j=b2;j<=b1;j++){
         f=b1-b2;
      }
       
   return(0);
  }