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

 
Zver4991:

テストの品質は何に依存し、どうすれば最大まで上げられるのか?

こちらのサイト 99%のシミュレーション品質でEAをテスト する方法をご覧ください。

http://tradelikeapro.ru/kak-poluchit-kachestvo-modelirovaniya-99/

 
Zhunko:
BOOL型の場合はそうです。つまり、MQL4の古いバージョンからのboolの場合です。1バイトのboolの場合は、この限りではありません。値が0より大きい場合、オーバーフローが発生します。

じゃあ、なんでだろうね。

   bool b=2;

エラーや警告を出さずにコンパイルできますか?

 
artmedia70:

じゃあ、なんでだろうね。

bool b=2;
は、エラーや警告を出さずにコンパイルしますか?

代入演算子は、bool 型に対してオーバーロードする必要があります。オーバーフローを監視し、1以上であれば代入してtrueを返す。

警告レベル4のスタジオでは、論理式に非論理的な型を挿入しようとすると、しばしば警告が表示されます。またはその逆で、算術演算で 論理型が使用される場合。

 
Zhunko:

代入演算子はbool型に対してオーバーロードされる必要があります。オーバーフローを監視し、1より大きい場合は、代入して真を返す。

警告レベル4のスタジオでは、論理式に何らかの非論理的な型を挿入しようとすると、しばしば警告が発生します。また、その逆で、算術演算で論理型を適用する場合。

の方が論理的でしょう。

#property strict

を発行し、警告を出さずに旧バージョンのままにしておく。

 
artmedia70:

は正確ではありませんが、要旨は正しいです。

実際:ゼロは偽に対応し、ゼロ以外の値は真に対応する

デフォルトに頼らず、initをboolean変数に変えて、それだけを使う。
 

まあ、結局はプログラマーじゃないんですけどね...。

口座番号1-5桁で 最小ロット0.01、ステップ0.01(ビルド584)、口座番号2-4符号で最小ロット0.1、ステップロット0.1(ビルド584)、口座番号3は番号2と同じですが端末はビルド509です。

そして、ストップロス・トロールがある。

void manageStops()
{ 
   string trailSymbol=Symbol();  
   for( int i = OrdersTotal()-1; i >=0 ; i-- ) 
   {
      if ( OrderSelect( i, SELECT_BY_POS ) == true ) 
      {  
         int trailOrderType = OrderType(); 
         if( OrderSymbol() != trailSymbol || trailOrderType > 1 || OrderProfit() < 0 ) continue; 
         double trailStopLoss = OrderStopLoss();   
         while( true ) {
            double trailStop = TrailingStop; 
            int trailDistance = MarketInfo( trailSymbol, MODE_STOPLEVEL ); 
            if( trailStop < trailDistance ) trailStop = trailStop+trailDistance;  
            bool modifyTrailingStop = false;  
            switch( trailOrderType ) 
            {
               case 0 : 
                  if(trailStopLoss < (Bid - (TrailingStop+TrailingStep) * pipPoints)) 
                  {
                     trailStopLoss = NormalizeDouble(Bid - TrailingStop * pipPoints,digits);   
                     modifyTrailingStop = true;       
                  }
                  break;    
               case 1 :                      
                  if(trailStopLoss > (Ask + (TrailingStop+TrailingStep) * pipPoints)) 
                  {
                     trailStopLoss = NormalizeDouble(Ask + TrailingStop * pipPoints,digits);             
                     modifyTrailingStop = true;             
                  }
               }                               
            if( modifyTrailingStop == false ) break;                       
            double trailTakeProfit = OrderTakeProfit(); 
            double trailPrice = OrderOpenPrice();  
            int trailTicket = OrderTicket();   
            if( ( OrderType() == OP_BUY && trailStopLoss > trailPrice && trailStopLoss < OrderOpenPrice() + ( MaxStop * pipPoints ) ) 
                  || ( OrderType() == OP_SELL && trailStopLoss < trailPrice && trailStopLoss > OrderOpenPrice() - ( MaxStop * pipPoints ) ) )

            OrderModify( trailTicket, trailPrice, trailStopLoss, trailTakeProfit,0);
            break; 
           } 
        }  
     }  
  return;   
} 

なぜアカウント#1ではストップロスが正常にトロールされるのに、アカウント#2、3では「エラー130」なのか?論理が破綻しているが、一応は成立している...。

 
evillive:

まあ、結局はプログラマーじゃないんですけどね...。

口座番号1-5桁で最小ロット0.01、ステップ0.01(ビルド584)、口座番号2-4桁で最小ロット0.1、ステップ0.1(ビルド584)、口座番号3、2番と同じタコエ、端末のみビルド509があります。

そして、ストップロス・トロールがある。

なぜ口座1のストップロスは正常にトレールしているのに、口座2と3は「エラー130」と表示されるのですか?論理が破綻しているが、一応は成立している...。


問題自体が、5桁の口座か4桁の口座かを暗示しているのです。コードを見てみるとpipPoint 変数はどこで定義され、 何に相当するのでしょうか?そこに問題がある可能性が高い。
 
pro_:

問題そのものは、5桁または4桁のカウントについての問題であることが示唆されています。コードを見ているところです。pipPointsは どこで定義され、 何に相当するのでしょうか?そこに問題がある可能性が高い。

initでpipPoints = MarketInfo(Symbol(), MODE_POINT)と定義しました。

MaxStopの値を大きくして、トロールも大きくすれば小刻みに変化するはずですが、1ポイント単位で変化し、少なくとも4桁でトロールが始まってしまいます...。やはりロジックを修正する必要がありますね、ピッチを調整する必要があります。

 
smdm:

こんにちは。

質問は以下の通りです。私はHeiken Ashi Smoothed indicatorhttps://www.mql5.com/ru/code/7930 を持っています。

このインディケータをより高いタイムフレーム、例えば30分や1時間のタイムフレームで5分足のチャートに取り付けられるようにするには、インディケータのコードにどんな変更を加えればよいでしょうか。

ありがとうございます。


私は同様の質問をしました - H4チャートに週足チャートから指標を適用する方法。 私はいくつかのフォーラムで叩いた。 そしてここでも、より小さいもののためのコードで大きなTF-mのサイズを規定するよりも良いものを得なかった、誰も提案しなかった。あなたの指標は、単純な物流と単純なバーの計算のその計算を取る場合、それは可能であるが。
 

というように、インジケータは価格が途中で閉じるバー上に縦線を引くはずです...。

double close_price(int nomer_bara)
{
if(nomer_bara<1)
{
Alert("нельзя анализировать текущий бар");
}
else
{
if(iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)<iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)/3)//возвращает 1/3 если цена текущего бара закрылась ниже 1/3 его спреда 
{
return(1/3);
}
if(iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)>iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)/3&&(iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)<iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)*2)/3)//возвращает 2/3 если цена текущего бара закрылась ниже 2/3 и выше 1/3 его спреда 
{
return(2/3);
}

if((iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)>(iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara))*2)/3&&iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)<iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara))//возвращает 1 если цена текущего бара закрылась выше 2/3 его спреда
{
return(1);
}
}

}

 if(close_price(1)==1/3)// в случае если цена закрылась внизу то нарисовать линию на этом баре
   {
 SetVLine(Red, "", Time[1], STYLE_SOLID, 2);
   }
и так вся проблема заключается в том что линия рисуется на каждом баре не пойму какого черта... помогите пожалуйста