Como otimizar um conselheiro corretamente - página 6

 

O primeiro em x é SL e o primeiro em y é TP.

Acho que a esquerda é a zona positiva e a direita é um golpe aleatório. Bem, SL em euro quid não pode ser 190 ou mais para o período M5

 
Loring писал (а) >>
e, conseqüentemente.

Cuidado, não se deixe levar pelo martingale. Os EAs foram feitos sob medida, eu apenas avisei que os colocaria lá fora. Eu não gosto desta tecnologia. É muito arriscado. Você pode usá-lo quando a probabilidade de um bom resultado for bastante alta. A única coisa a fazer é criar um mecanismo desse tipo.

 

Mas um pouco de teste é possível .... O resultado, a propósito, está próximo ao meu algoritmo. Para não arrancar o cabelo... Mas eu quero me familiarizar.

 
Sim, bem... Como Zverev costumava dizer, "A estrela está em choque". O algoritmo se comporta de forma estranha, ou como gosta de ser... É aí que se liga o reinvestimento.
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

E como tudo começou bem...

 

Mas se o drawdown for > 50% ... Eu não sei quem arriscaria investir. Parece que deveríamos tê-lo usado como está. Mais um exemplo do novo ser inimigo dos melhores...

 

Após bater sua cabeça (teimosamente) contra a mesa, a função de cálculo do tamanho do lote toma a seguinte forma

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); 
}

onde MaximumRisk - parte do capital (calculado como 1/MáximumRisk) que pode ser usado ao abrir uma posição.

A necessidade de dividir e multiplicar por etapas desapareceu, porque esta função não descarta partes fracionárias, mas as arredonda de acordo com as regras matemáticas. Agora o lote é calculado com o valor da margem, o que diminui o risco. A linha "lote=MathMax(MathMin(lote,maxlot),minlot);" tentará abrir uma posição do tamanho mínimo do lote (geralmente 0,1) de qualquer forma, o que aumentará o risco da operação. Talvez seja melhor desativá-lo completamente. Mais uma vez, só aparecerá com um depósito insuficiente.

Mais uma vez, quero agradecer ao Viktor pelo código fonte fornecido.

 
Loring писал (а) >>

Após bater sua cabeça (teimosamente) contra a mesa, a função de cálculo do tamanho do lote toma a seguinte forma

Onde MaximumRisk - parte do patrimônio (calculado como 1/MáximumRisk) que pode ser usado para abrir uma posição.

Não há necessidade de dividir ou multiplicar por etapas, pois esta função não corta partes fracionárias, mas as arredonda de acordo com regras matemáticas.

Lembre-se, nem todas as corretoras têm um incremento de 0,1, existem outras variantes.

 
Estou me sentindo um pouco assustador... Parece certo, mas algo está errado. Então realmente /MaximumRisk/step,0)*step... Esqueci que em algumas empresas de corretagem a etapa pode ser 0,001. É bom ter alguém para corrigir...
 

Então deve ser assim... (não tenho certeza sobre o '0' na função de arredondamento)

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); 
}
 

Não entendo porque a abertura da posição foi colocada em uma função separada. Um comando pode ser executado localmente... Ou é um pedaço de algo maior... ТР e SL não são transmitidos na seqüência em que estão em OrderSend... Graças a Deus, eles são recebidos à medida que são transmitidos. Certamente não é um grande negócio, mas ....