アドバイザーの正しい最適化方法 - ページ 6

 

xの1枚目はSL、yの1枚目はTPです。

左がポジティブゾーン、右がランダムヒットだと思うのですが...。まあ、SLがユーロで190ドル以上というのは、M5時代にはありえないことですが......。

 
Loring писал (а)>>
と、それに応じて

気をつけよう、マーチンゲールに夢中になってはいけない。EAはオーダーメイドで、「出すよ」と警告しただけです。私はこの技術が好きではありません。非常にリスキーです。良い結果が得られる確率がかなり高い場合に使用するとよいでしょう。あとは、そのような仕組みを作るだけです。

 

でも、ちょっとしたテストは可能なんです.ちなみに結果は、私のアルゴリズムに近いものでした。だから、私は髪を引き裂くことはありません...。でも、知り合いになりたいんです。

 
ええ、まあ...ズベレフがよく言っていたように、「スターはショックを受けている」...。このアルゴリズムは奇妙な振る舞いをする、あるいは好きなように...その時に、再投資のスイッチが入るのです。
Strategy Tester Report
VininE_Game_1
FxProfit-Demo (Build 217)
Символ    EURUSD (Euro vs US Dollar)
Период    5 Минут (M5) 2008.06.01 22:05 - 2008.06.27 21:55 (2008.06.01 - 2008.06.29)
Модель    Все тики (наиболее точный метод на основе всех наименьших доступных таймфреймов)
Параметры    Lots=0.1; MaximumRisk=6; cmd=0; TP=262; SL=18; MagicNumber=0; 

Баров в истории    6749    Смоделировано тиков    152889    Качество моделирования    90.00%
Ошибки рассогласования графиков    0                

Начальный депозит    1500.00                
Чистая прибыль    7908.10    Общая прибыль    11037.80    Общий убыток    -3129.70
Прибыльность    3.53    Матожидание выигрыша    790.81        
Абсолютная просадка    662.60    Максимальная просадка    4846.40 (54.75%)    Относительная просадка    54.75% (4846.40)

Всего сделок    10    Короткие позиции (% выигравших)    5 (20.00%)    Длинные позиции (% выигравших)    5 (40.00%)
    Прибыльные сделки (% от всех)    3 (30.00%)    Убыточные сделки (% от всех)    7 (70.00%)
Самая большая    прибыльная сделка    6359.60    убыточная сделка    -1280.00
Средняя    прибыльная сделка    3679.27    убыточная сделка    -447.10
Максимальное количество    непрерывных выигрышей (прибыль)    2 (4678.20)    непрерывных проигрышей (убыток)    4 (-612.60)
Максимальная    непрерывная прибыль (число выигрышей)    6359.60 (1)    непрерывный убыток (число проигрышей)    -1280.00 (1)
Средний    непрерывный выигрыш    2    непрерывный проигрыш    2

№    Время    Тип    Ордер    Объём    Цена    S / L    T / P    Прибыль    Баланс
1    2008.06.01 22:06    buy    1    0.90    1.5555    1.5535    1.5815    
2    2008.06.02 03:31    s/l    1    0.90    1.5535    1.5535    1.5815    -192.60    1307.40
3    2008.06.03 00:00    sell    2    0.80    1.5539    1.5559    1.5279    
4    2008.06.03 08:30    s/l    2    0.80    1.5559    1.5559    1.5279    -160.00    1147.40
5    2008.06.04 00:01    buy    3    0.70    1.5439    1.5419    1.5699    
6    2008.06.04 08:26    s/l    3    0.70    1.5419    1.5419    1.5699    -140.00    1007.40
7    2008.06.05 00:05    sell    4    0.60    1.5425    1.5445    1.5165    
8    2008.06.05 01:39    s/l    4    0.60    1.5445    1.5445    1.5165    -120.00    887.40
9    2008.06.06 00:00    buy    5    0.50    1.5584    1.5564    1.5844    
10    2008.06.09 09:39    t/p    5    0.50    1.5844    1.5564    1.5844    1293.00    2180.40
11    2008.06.10 00:00    sell    6    1.30    1.5640    1.5660    1.5380    
12    2008.06.12 14:34    t/p    6    1.30    1.5380    1.5660    1.5380    3385.20    5565.60
13    2008.06.13 00:00    buy    7    3.30    1.5454    1.5434    1.5714    
14    2008.06.13 02:20    s/l    7    3.30    1.5434    1.5434    1.5714    -660.00    4905.60
15    2008.06.15 22:10    sell    8    2.90    1.5417    1.5437    1.5157    
16    2008.06.16 10:47    s/l    8    2.90    1.5437    1.5437    1.5157    -577.10    4328.50
17    2008.06.17 00:02    buy    9    2.60    1.5470    1.5450    1.5730    
18    2008.06.26 13:44    t/p    9    2.60    1.5730    1.5450    1.5730    6359.60    10688.10
19    2008.06.27 00:00    sell    10    6.40    1.5751    1.5771    1.5491    
20    2008.06.27 10:39    s/l    10    6.40    1.5771    1.5771    1.5491    -1280.00    9408.10

そして、その始まりはいかに...。

 

しかし、ドローダウンが50%を超えると・・・。リスクを冒してまで投資する人はいないでしょう。そのまま使うべきだったようだ。新しいものは最高の敵であることを示すもう一つの例です...。

 

テーブルに頭を(頑固に)ぶつけた結果、ロットサイズ計算機能は次のような形になりました。

double getLots() {
   if (MaximumRisk>0) 
      {
       double minlot = MarketInfo(Symbol(),MODE_MINLOT);
       double maxlot = MarketInfo(Symbol(),MODE_MAXLOT);       

       double lot = NormalizeDouble(AccountFreeMargin()/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/MaximumRisk,1);
       lot=MathMax(MathMin(lot,maxlot),minlot);
      }
   else lot=Lots;
   return(lot); 
}

ここで、MaximumRisk - ポジションを開くときに使用することができる資本の一部(1/MaximumRiskとして計算されます)。

この機能は小数部分を捨てず、数学のルールに従って丸めるので、段階的に割り算や掛け算をする必要がなくなります。これでロットは証拠金の値で計算されるようになり、リスクが減少します。lot=MathMax(MathMin(lot,maxlot),minlot);" という行は、とにかく最小ロットサイズ(通常は0.1)のポジションを開こうとするので、運用のリスクが高くなります。完全に無効にした方が良い場合もあります。この場合も、入金不足の場合のみ表示されます。

改めて、ソースコードを提供してくれたViktorに感謝したい...。

 
Loring писал (а)>>

テーブルに頭を(頑固に)ぶつけた結果、ロットサイズ計算機能は次のような形になりました。

ここで、MaximumRisk - ポジションを開くために使用することができる株式の一部(1/MaximumRiskとして計算されます)。

本機能は小数点以下を切り捨てず、数学的なルールに従って四捨五入するため、ステップによる割り算や掛け算は必要ありません。

すべての証券会社が0.1のロット増分を持つのではなく、他のバリアントがあることを覚えておいてください。

 
ちょっと不気味な感じがする...。正しいようでいて、何かが間違っている。そして、本当に /MaximumRisk/step,0)*step...証券会社によっては、ステップが0,001の場合もあることを忘れていました。訂正してくれる人がいてよかった・・・。
 

じゃあ、きっとこうだ...。(丸め関数の'0'はよくわかりません)。

double getLots() {
   if (MaximumRisk>0) 
      {
       double minlot = MarketInfo(Symbol(),MODE_MINLOT);
       double maxlot = MarketInfo(Symbol(),MODE_MAXLOT);       
       double step   = MarketInfo(Symbol(),MODE_LOTSTEP);       

       double lot = NormalizeDouble(AccountFreeMargin()/MarketInfo(Symbol(),MODE_MARGINREQUIRED)/MaximumRisk/step,0)*step;
       lot=MathMax(MathMin(lot,maxlot),minlot);
      }
   else lot=Lots;
   return(lot); 
}
 

なぜ、ポジションの開放を 別機能にしたのか理解できない。1つのコマンドをローカルに実行することができる...それとも、もっと大きな何かのスクラップなのか......。ТРとSLはOrderSend...にある順序とは別に送信される。発信したまま受信されるのはありがたい。確かに大したことはないのですが、、、。