[アーカイブ!】どんなルーキーの質問でも、フォーラムを散らかさないように。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 2. - ページ 520

 
Roger:

一般的には、到達すべき預金残高と、削除するファイル数の2つの変数を追加しました。一度だけ有効で、その後は別の値にレベルを修正するか、Expert Advisor を再起動する必要があります。
ありがとうございます - 今、テストを実行します。それとも、テスターで動かすには適さないのでしょうか?
 
alex12:
ありがとうございます - 今テストを実行してみます。それともテスター走行には不向きなのでしょうか?

どのようにテストすればいいのでしょうか?
 
demlin:

皆さん、こんにちは。

フラットと判断するための通常の指標を教えてください、よろしくお願いします ))))


これは 自分でテストしているんです。

iCustom()でExpert Advisorに簡単に追加(接続)することができます。

 
2台のワゴンを交差させるシンプルなシステム。
買い - 速いものが遅いものを上に交差させる。
売り - 速いものが遅いものを下に交差させる。

クローズ - 反対の信号やトロール。ポジションを開くたびにストップ=50pipsを設定するには、コードのどこを変更すればよいのか教えてください。

extern double Lots           =   0; // лот, если 0, то динамический
extern double RiskPercentage =  70; // % от депо на лот, если динамический
extern int    FastPer        =   4;
extern int    SlowPer        =  18;
extern int    magicnumber    = 777;
extern int    TrailingStop   =  20; 
extern bool   PolLots        = true;



int prevtime;
int ticket=0;
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----




   if (!IsDemo())
    {
//     Print ("Эта версия только для демо-счетов");
//     return(0);
    }   


   if(Time[0] == prevtime)
   { 

       return(0);
   }
   prevtime = Time[0];
   if(!IsTradeAllowed()) 
     {
       prevtime = Time[1];
       return(0);
     }




 int Ord=0;
 double ClLot=0;
int LotsCount=0;
   int i=0;  
   int total = OrdersTotal();   
   for(i = 0; i <= total; i++) 
     {
      if(TrailingStop>0)  
       {                 
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       if(OrderMagicNumber() == magicnumber) 
         {
         ticket=OrderTicket(); 
         ClLot=OrderLots();
         if (OrderType()==OP_BUY)
          {
           Ord=1;
          }
         else
          {
           Ord=2;
          }         
          LotsCount ++;
          TrailingStairs(OrderTicket(),TrailingStop);
         }
       }
      }
/*
 
     for(i = 0; i <= OrdersTotal(); i++) 
      {
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
       if(OrderMagicNumber() == magicnumber) 
         {
         ticket=OrderTicket(); 
         ClLot=OrderLots();
         if (OrderType()==OP_BUY)
          {
           Ord=1;
          }
         else
          {
           Ord=2;
          }
         }
      } 
*/    
bool SellOp=false;
bool BuyOp=false;

double MAFast1=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,2),Digits);
double MAFast2=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,1),Digits);
double MAFast3=NormalizeDouble(iMA(NULL,0,FastPer,0,MODE_SMA,PRICE_CLOSE,0),Digits);
double MASlow1=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,2),Digits);
double MASlow2=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,1),Digits);
double MASlow3=NormalizeDouble(iMA(NULL,0,SlowPer,0,MODE_SMA,PRICE_CLOSE,0),Digits);


      
if ((MAFast1<MASlow1)&&
    (MAFast2==MASlow2)&&
    (MAFast3>MASlow3))
{
 BuyOp=true;
}

if ((MAFast1>MASlow1)&&
    (MAFast2==MASlow2)&&
    (MAFast3<MASlow3))
{
 SellOp=true;
}



if (BuyOp)
 {
  if (Ord==2)
   {
    OrderClose(ticket,ClLot,Ask,3,Red);
   }
  if (Ord!=1)
   {
    OrderSend(Symbol(),OP_BUY,Lot(),Ask,3,0,0,"MA_Buy",magicnumber,0,Green);
   }
 }

if (SellOp)
 {
  if (Ord==1)
   {
    OrderClose(ticket,ClLot,Bid,3,Green);
   }
  if (Ord!=2)
   {
    OrderSend(Symbol(),OP_SELL,Lot(),Bid,3,0,0,"MA_Sell",magicnumber,0,Red);
   }
 }



   
//----
   return(0);
  }
//+------------------------------------------------------------------+
void TrailingStairs(int ticket,int trldistance)
   { 
    int Spred=Ask - Bid;
    if (OrderType()==OP_BUY)
      {
       if((Bid-OrderOpenPrice())>(Point*trldistance))
         {
          if(OrderStopLoss()<Bid-Point*trldistance || (OrderStopLoss()==0))
            {
             OrderModify(ticket,OrderOpenPrice(),Bid-Point*trldistance,OrderTakeProfit(),0,Green);
             if (PolLots)
             if (NormalizeDouble(OrderLots()/2,1)>MarketInfo(Symbol(), MODE_MINLOT))
               {
               OrderClose(ticket,NormalizeDouble(OrderLots()/2,1),Bid,3,Green);
               }
             else
               {
               OrderClose(ticket,OrderLots(),Bid,3,Green);
               }
            }
         }
       }
     else
       {
        if((OrderOpenPrice()-Ask)>(Point*trldistance))
          {
           if((OrderStopLoss()>(Ask+Point*trldistance)) || (OrderStopLoss()==0))
             {
              OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*trldistance,OrderTakeProfit(),0,Red);
             if (PolLots)
             if (NormalizeDouble(OrderLots()/2,1)>MarketInfo(Symbol(), MODE_MINLOT))
               {
               OrderClose(ticket,NormalizeDouble(OrderLots()/2,1),Ask,3,Green);
               }
             else
               {
               OrderClose(ticket,OrderLots(),Ask,3,Green);
               }
             }
          }
        }
    }
    
double Lot()
{
 double LotQ = Lots;

 if (Lots==0)
  {
   double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
   double minLot = MarketInfo(Symbol(), MODE_MINLOT);
   double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
   double step =   MarketInfo(Symbol(), MODE_LOTSTEP);
   double account = AccountFreeMargin();
   
   double percentage = account*RiskPercentage/100;
   
   LotQ = MathRound(percentage/margin/step)*step;
   
   if(LotQ < minLot)
   {
      LotQ = minLot;
   }
   
   if(LotQ > maxLot)
   {
      LotQ = maxLot;
   }
  } 
  return (LotQ);
  }

 
Roman.:


これは 自分でもテストしています。

iCustom()でExpert Advisorに簡単に追加(接続)することができます。

EAで極小値と極大値をどのように定義するのでしょうか?結局、チャートのある局所領域0.3800(青線)は極値で一時的な修正に対応し、次の局所領域0.3041(緑線)はその極値となって反転をマークしました...。

最初のロング(赤線)での極端な安値0.4596はどうでしょうか?何も言っていませんね。

また、指標の極端な低値が修正や反転を示すかどうかは、どのように判断するのでしょうか。実際、最初のケースで0.3800の値は修正(緑の縦線)を示し、2番目のケースでトレンドの終わり(赤の縦線)を示しました。

そして最後に--チャートには、そうした局所的な極端さがたくさんあります。結局、3〜5時間の間、確実に最低値が存在し、その時間帯としては極端に低い値となります。指標となる極値を見つけるために、ある時間間隔を指定すると、極値は見つかるのですが...しかし、指定されたタイムフレームを超えて、その後のバーでは、指標の値がさらに低く(高く)なり、この値が極端に低く(高く)なることがあります - しかし、以前に見つけたものをどうすればよいのでしょうか?それをもとにExpert Advisorが判断するのですから、なおさらです。

しかし...


 
artmedia70:

Expert Advisorで極端な低値と極端な高値をどのように定義しているのでしょうか。結局、チャートのあるローカルセクターでは0.3800(青線)が極値で一時的な修正に対応し、次のローカルセクターでは0.3041(緑線)がその極値となり反転をマークしました......。

最初のロング(赤線)での極端な安値0.4596はどうでしょうか?何も言っていませんね。

また、指標の極端な低値が修正や反転を示すかどうかは、どのように判断するのでしょうか。実際、最初のケースで0.3800の値は修正(緑の縦線)を示し、2番目のケースでトレンドの終わり(赤の縦線)を示しました。

そして最後に--チャートには、そうした局所的な極端さがたくさんあります。3〜5時間の間隔を設定すれば、確実に最低値となり、その時間間隔では極端に低い値となる。指標となる極値を見つけるためにある時間間隔を指定すると、それが見つかるがしかし、指定されたタイムフレームを超えて、その後のバーでは、指標の値がさらに低く(高く)なり、この値が極端に低く(高く)なることがあります - しかし、以前に見つけたものをどうすればよいのでしょうか?それをもとにExpert Advisorが判断するのだから、なおさらだ...。

しかし...





私はこの指標を、トレンド戦略かフラット戦略のどちらかの市場に 参入するためのフィルターとして見ています。つまり、その読みには次のような解釈が現れます。

double iVAR_1 = iCustom (Symbol(),trend_period, "iVAR", n, nBars, 0, 1);                    // расчет индикатора iVAR
   

0.5を下回る場合は、トレンドが発生していることを意味します。

iVAR_1 < 0.5 &&                                                            // тренд на основном ТФ   

極端に低い値は、しばしば現在のトレンドの終わり(補正)に先行 - それは図に既にある - ここにトロールは、(市場で)動作します。


指標値が0.5を超えると、市場が横ばいの 状態であることを意味する

iVAR_1 > 0.5 && 

極端に高い値は、重要なトレンドの始まりに先行することが多い - 前回の解釈を参照。

0.5前後の指標は、不確実な市場状況を意味する。ここでは、ある「レベル」のインデントを使用することが可能である(私は、それが冗長であることを排除しない。値0.5とすべてを取る)、以下の両方 -x、および上記 -y 値0.5(ベースレベル)、外部変数に入力し、ステップ0.02で最適化、のは、変数nと 同じと言いましょう - 開始:2ステップ:1停止:7 - それは余計なことではない、私はそれを行う - すぐに私は雪崩支店(それがトレンドシステムです:-)で結果を投稿します、唯一のMMでマーチン...とすべて...。:-)))).

 
Roman.:


私はこの指標を、トレンドまたはフラット戦略のどちらで市場に参入するかのフィルターとして見ており、すなわちその読みは次のような解釈をしています。

指標値が0.5を下回る場合は、トレンドのあるマーケット状況を示しています。

極端に低い値は、しばしば現在のトレンドの終わり(補正)に先行 - これはすでに図に合った - ここにトロールは、(市場で)動作します。


指標値が0.5を超えると、相場が横ばいの 状態であることを意味する

極めて高い数値は、しばしば重要なトレンドの始まりに先行する-前回の解釈を参照。

0.5前後の指標は不透明な市場環境を意味する。ここで、ある「レベル」のインデントを使用することが可能である(冗長であることを排除しない。値0.5とすべてを取る)、以下の両方 -x、および上記 -Y 値0.5(ベースレベル)、外部変数にそれらを入力し、ステップ0.02で最適化、のは、変数nと 同じ言ってみましょう - 開始:2ステップ:1停止:7 - これは過剰ではない、私はそれを行う - すぐに私はLavina支店(それはトレンドシステムです:-)で結果を投稿します、唯一のマーティンによるMMと... とすべて...。:-)))).

私は最適化が好きではありません。本質はフィット感です...。そして、赤ちゃんのパラメータを最適化することもない...。市場の状況に応じて、必要なパラメータを選択するようにしています。

分かりやすい説明ありがとうございます、でも...。:)正直なところ - 上の投稿は、七面鳥の方向に小石をキャッチ...:)

 

こんにちは。

そんな疑問があります。Expert Advisor にはトレードをcsv ファイルに書き出す機能がありますが、Expert Advisor のパラメータで資金管理 システムのオプションを有効/無効(TRUE/FALSE)にすると発生する問題があることがわかりました。例えば、ソースファイルをコンパイルした直後はすべてが正常に動作し、意図したとおりにファイルにトレーディングが書き込まれます。下図は、正しく書き込まれたデータです。

その後、テスターでExpert AdvisorのパラメータにあるMoney Management Systemオプションを有効にし、テストを実行しましたが、データが正しくファイルに書き込まれません。下図は、比較のために2つのバリエーションを示したものです。左側が正しく(上記のように)、右側が正しくない。

これがどういうことなのか、自分では把握できていないのですが、次のようなものを見つけました。また、資金管理システムのオプションを有効/無効にして、テストを開始する前にソースファイルを再度コンパイルすると、すべてが正しく書き込まれます。

どのような問題が考えられるか教えてください。

 
artmedia70:

最適化が嫌い:本質はフィッティング...。そして、製品のパラメーターを最適化することもない...。市場の状況に応じて、必要なパラメータを選択させるようにしています。

とはいえ、わかりやすい説明ありがとうございました...。:)正直なところ-上の投稿は、七面鳥の方向に小石を投げるような感じで行ってください...。:)


なるほど...。興味のある方は、こちらも似たようなものです(予告編で)。こちら(スレッド全体)-0.6以上/以下の処理が ある-とこちら(選択ページ)もご覧ください。

ファイル:
 
Roman.:


これは 自分でテストしているんです。

iCustom()でEAに簡単に追加(プラグイン)することができます。

ありがとうございます、ダウンロードしました、Expert Advisorでテストしてみます。