初心者の方からの質問 MQL5 MT5 MetaTrader 5 - ページ 834

 
Pavel Nikiforov:
何が問題なのか説明してください。この関数は、すべてのオープンポジションに 目を通し、指定されたマジックナンバーを持つポジションの数を計算することになっています。実際には、同じチケットとマジックを持つ別のEAによって開かれたリストから1つを選ぶだけなので、カウントは常に=0になります。

自分でもわかったのですが、選択はPositionGetSymbolで 行う必要があります。

//+------------------------------------------------------------------+
int OpenPositions()//проверка открытых позиций по Magic number 
  {
   int count=0;
     for(int z=PositionsTotal()-1; z>=0; z --) // Перебор всех позиций
     {
       if(PositionGetSymbol(z)!=_Symbol) // Найдена позиция с заданным символом
        {
         Print(__FUNCSIG__" позиция не выбрана ",GetLastError()); continue;
        }
      long  ticket = PositionGetInteger(POSITION_TICKET);
            Print(__FUNCSIG__" ТИКЕТ ", IntegerToString(ticket));
      ulong myMN=PositionGetInteger(POSITION_MAGIC);
            Print(__FUNCSIG__" МАГИК ", IntegerToString(myMN));
      if(myMN==Magic)
            count++;
     }
   return(count);
  }
//+------------------------------------------------------------------+
 
Pavel Nikiforov:

自分で考えたのですが、選択はPositionGetSymbolで 行う必要があります。

よくわからない。PositionGetTicket(i)関数を使ってハッジ口座で選択し、シンボルとマジックを確認する必要があります。

Документация по MQL5: Торговые функции / PositionGetTicket
Документация по MQL5: Торговые функции / PositionGetTicket
  • www.mql5.com
Торговые функции / PositionGetTicket - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
このトピックに関連しないコメントは、「MQL4 MT4 MetaTrader 4初心者からの質問」に移動しました。
 
Alexey Viktorov:

把握するのはよくないですね。PositionGetTicket(i)関数でhadge口座で選択し、シンボルとマジックを確認する必要があります。

うん、良くなったね。デモでは他の機能も不具合があったんだけど、今は動くようになったよ。

 

こんにちは、このインジケーターについてアドバイスをお願いします https://www.mql5.com/ru/forum/94447#comment_6780067

価格が大きく変化したとき、つまり4ピップス以上変化したときに、チャート上に赤と青の丸を付けます。

価格が10pips以上変化したときだけシグナルが出るようにしたい。

ファイル:
1.png  48 kb
 
yesterday35:

こんにちは、このインジケーターについてアドバイスをお願いします https://www.mql5.com/ru/forum/94447#comment_6780067

価格が大きく変化したとき、つまり4ピップス以上変化したときに、チャート上に赤と青の丸を付けます。

価格が10pips以上変化したときだけ、このシグナルが出るようにしたい。

このインジケータは、ピップスではなく、シグマまたはRMS(二乗平均平方根偏差)を計算します。直近のNティック(デフォルトでは50)のサンプルについて。3シグマのチャンネルを構築します。価格がチャネルから飛び出した場合、ここをマークすることになります。しかし、主な問題は、最初の価格シリーズが非常に重いテールを持つ正規分布ではないことです。実はこのインジケーター、トイヘルなんです。

 

こんにちは。

小さなプログラムを書いています。まったく意味不明な事態に直面しています。

私のコードでは、この2行があります。OnTester()の一番最後にあり、ループ内ではありません。

Print("Мат ожидание ставки  ",MatOgidanieStavk(KKef,VVer,Stavka)," Ставка ",Stavka);
Print("Ставка =",Stavka);

そして、この行を実行した結果、予想外の結果が出たので紹介します。

Мат ожидание ставки  447.0461599959392 Ставка -1.0
Ставка =3912.820000338397

以下は,関数MatOgidanieStavk定義 です.

double MatOgidanieStavk(double Kef,double Ver,double &BestStavka)
{
 .......... 
   BestStavka=-1;// Первое обращении к этой переменой.
............
return MatOgidanie;
}
 
pivomoe:

こんにちは。

小さなプログラムを書いています。まったく意味不明な事態に直面しています。

私のコードでは、この2行があります。OnTester()の一番最後にあり、ループ内ではありません。

そして、この行を実行した結果、予想外の結果が出たので紹介します。

以下は,関数MatOgidanieStavk定義 です.

Stavkaはプリントの前に初期化されるのですか?

関数内部での最初の呼び出しであることは、どのように判断されるのですか?

どのような結果を期待していたのでしょうか?

 

ありがとうございます。問題を解決しました。

Printの前にStavkaの 変数があることが判明したのです。は-1に等しかった。その値はPrint関数に 渡され、コピーとして保存される。私の関数MatOgidanieStavkStavka変数自体を変更した のであって、印刷されるそのコピーを 変更したのではありません。

 
そうあるべきなのです。

2795/2797は0となります。四捨五入を行わないため。s3 = (double)s2/s1; または s2 と s1 に double を選択する。

理由: