如何正确优化一个顾问 - 页 6

 

X上的第一个是SL,Y上的是TP。

我认为左边是正区,右边是乱打......。好吧,以欧元计价的SL不可能是190或更多的M5时期......。

 
Loring писал (а)>>
和相应的。

注意,不要被马蹄铁所迷惑。EAs是定制的,我只是警告他们,我将把它们放在那里。我不喜欢这种技术。这是很有风险的。当好结果的概率相当高时,你可以使用它。唯一要做的就是建立这样一个机制。

 

但可以进行一点测试....顺便说一下,这个结果与我的算法很接近。所以我不会撕掉我的头发......但我想认识一下。

 
是的,嗯...正如兹维列夫曾经说过的,"明星受到了冲击"...该算法确实表现得很奇怪,或者说它喜欢...这就是你开启再投资的时候。
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); 
}
 

我不明白为什么把职位的开设 放在一个单独的功能中。一个命令可以在本地执行...或者它是一个更大的东西的碎片......ТР和SL不是按照它们在OrderSend中的那个顺序传送的。谢天谢地,它们在传送过程中被接收。当然不是什么大问题,但....

原因: