Per coloro che sono interessati - è stato possibile raggiungere valori di lavoro (medi) della variabile f ottimale, con il metodo della media geometrica secondo R. Vince nell'EA incluso nella consegna standard della MT basata su MA (vedi schermata). In base alle condizioni e all'ordine di calcolo di f ottimale dal libro, il suo valore è 0,36. Dopo aver terminato il codice, posterò qui la funzione con la descrizione e l'ordine di utilizzo per calcolare i volumi dei lotti aperti nei futuri scambi secondo il libro di R. Vince.
Ehm, come si può allegare tutto questo a un EA funzionante con una semplice definizione di dimensione del lotto in % di depo? O forse non sto guadagnando abbastanza)))
Voglio dire, è tutto un gioco mentale o ha un'applicazione pratica con un effetto positivo?
Ehm, come si può allegare tutto questo a un EA funzionante con una semplice definizione della dimensione del lotto come % del deposito? Forse non sto guadagnando abbastanza)).
Voglio dire che tutto questo è un gioco mentale o ha un'applicazione pratica con un effetto positivo?
Certo, leggi R Vince - vedi i post sopra il trailer, non l'ho ancora provato io stesso su una demo... Vedremo... :-)))
Posterò la fiya qui appena avrò finito, con una descrizione.
Torniamo al codice originale, che abbiamo già stravolto alcune volte:
for (f = 0.01; f<=1.0; f=f+0.01)//цикл перебора переменной f для поиска оптимального ее значения,при котором TWR-максимально
{
for ( orderIndex = 1;orderIndex<Qnt; orderIndex++) //при заданной f проходим по всем закрытым ордерам
{ // и считаем относительный конечный капитал (TWR)
TWR = TWR*(1+f*(-Mas_Outcome_of_transactions[orderIndex]/(D))); // TWR - это произведение всех HPR//if (TWR>TWR_Rez) {TWR_Rez = TWR; Print(" TWR = ",TWR_Rez, " при f = ", f);} // else break;
}
if (TWR>TWR_Rez) {
TWR_Rez = TWR;
G=MathPow (TWR_Rez, 0.001988); // 1/503 сделки по данной торговой системе, как в книжке: в степени 1/N Print(" TWR = ",TWR_Rez," G = ",G, " при f = ", f);} // если текущий TWR > результирующего, elsebreak; // то результирующий делаем равным текущему, иначе переходим на след итерацию цикла по f
}
Potrebbe essere che la variabile TWR non venga resettata a "1" ad ogni iterazione di f?
Torniamo al codice originale, che abbiamo già stravolto alcune volte:
Forse si tratta della variabile TWR che non viene resettata a "1" ad ogni iterazione di f?
Sì, un punto competente a proposito... Possibile... molto probabile. Lo controllerò questo pomeriggio e lo posterò qui. Grazie.
Allora non è necessario creare un array TWR (come questo - la versione fresca - neanche...
Qui ho provato tutti i tipi di esorcismi per ridurre proporzionalmente il suo valore nel prodotto (perché il suo valore assoluto non è importante, è il confronto per più/piccolo che conta), in modo da evitare l'overflow quando si calcola il f ottimale.
for (f = 0.01; f<=1.0; f=f+0.01)//цикл перебора переменной f для поиска оптимального ее значения,при котором TWR-максимально
{
for ( orderIndex = 1;orderIndex<Qnt; orderIndex++) //при заданной f проходим по всем закрытым ордерам
{ // и считаем относительный конечный капитал (TWR)//TWR = MathPow(TWR*(1+f*(-Mas_Outcome_of_transactions[orderIndex]/(D))),0.33); // TWR - это произведение всех HPR
Mas_TWR[orderIndex] = (1+f*(-Mas_Outcome_of_transactions[orderIndex]/(D))); // заполняем массив значениями HPR
}
//Print ("Mas_TWR[Qnt]= ", Mas_TWR[Qnt]); for ( orderIndex = 1;orderIndex<Qnt; orderIndex++)
{
TWR = MathSqrt(TWR*Mas_TWR[orderIndex]);}
if (TWR>TWR_Rez)
{
TWR_Rez = TWR;
//G = MathPow(TWR_Rez, 1/N);// G1 = G1*MathPow(Mas_TWR[orderIndex], 1/N);//G=MathPow (TWR_Rez, 0.0054054); // 1/185 сделки по данной торговой системе, как в книжке: в степени 1/N Print(" TWR_Rez = ",DoubleToStr(TWR_Rez,8), " при f = ", f);
// если текущий TWR > результирующего
}
else
{
TWR_Rez = TWR;
// G=MathPow (TWR_Rez, 1/N);Print(" А это уже меньше: TWR_Rez = ",DoubleToStr(TWR_Rez,8), " при f = ", f);
}
}
Print("Закрытых позиций = ", Qnt, " Нетто Профит/лосс = ", SUMM, " У последней ",Qnt, " закрытой позы профит/лосс = ",
Mas_Outcome_of_transactions[Qnt]);
Ero troppo pigro per incollare il codice nell'EA e controllarlo io stesso! :)))
Non ho ancora un vero e proprio Expert Advisor. Ho solo alcune idee. Ecco perché ho preso una media mobile standard senza ottimizzarla e ho scelto un periodo redditizio.
L'ultimo codice che ho provato, quando ho capito che TWR non si resetta a "1", era il seguente:
//+------------------------------------------------------------------+//---------переменные для расчета лота по оптимальному f Ральфа Винсаint Mas_Outcome_of_transactions [10000]; // Массив профитов/убытков закрытых позиций//+------------------------------------------------------------------+//| expert deinitialization function |//+------------------------------------------------------------------+int deinit()
{
//--- Расчет оптимального f ---int Qnt = 0, Orders = OrdersHistoryTotal(); // Счётчик количества ордеров ArrayInitialize(Mas_Outcome_of_transactions, 0); // Обнуление массиваdouble f, D, SUMM, TWR, G, G_Rez, Pow = 1/NormalizeDouble(Orders, 0);
int orderIndex;
for (orderIndex = 0; orderIndex < Orders; orderIndex++)
{
if (!OrderSelect(orderIndex, SELECT_BY_POS, MODE_HISTORY))
{
Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
continue;
}
if (OrderSymbol() != Symbol() || OrderMagicNumber() != magic || OrderCloseTime()==0)
continue;
int lastType = OrderType();
double lastLots = OrderLots();
double lastProfit = OrderProfit() + OrderSwap();
if (orderIndex == 0 || lastProfit < D)
D = lastProfit;
Mas_Outcome_of_transactions[Qnt] = lastProfit; // Заполняем массив профитом/лоссом по всем закрытым позициям
SUMM=SUMM+lastProfit;
Qnt++; // увеличиваем счетчик закрытых ордеров
}
Print("D = ", DoubleToStr(D, 2), " Pow = ", DoubleToStr(Pow, 8));
for (f = 0.01; f<=1.0; f=f+0.01) // цикл перебора переменной f для поиска оптимального ее значения,
{ // при котором G - максимально
G = 1;
for ( orderIndex = 1; orderIndex < Qnt; orderIndex++) // при заданной f проходим по всем закрытым ордерам
{ // и считаем среднее геометрическое от TWR
TWR = 1+f*(-Mas_Outcome_of_transactions[orderIndex]/(D));
G *= MathPow(TWR, Pow);
}
if (G > G_Rez)
{
G_Rez = G;
Print("G = ", G, " при f = ", f);
} // если текущий G > результирующего, то результирующий делаем равным текущемуelsebreak; // иначе переходим на следующую итерацию цикла по f
}
Print("Закрытых позиций = ", Qnt,
" Нетто Профит/лосс = ", SUMM,
" У последней ", Qnt,
" закрытой позы профит/лосс = ", Mas_Outcome_of_transactions[Qnt-1]);
return(0);
}
Nessuna matrice TWR.
Aspetterete a lungo per una tracimazione! ;D Anche se forse non sarebbe successo affatto...
Per coloro che sono interessati - è stato possibile raggiungere valori di lavoro (medi) della variabile f ottimale, con il metodo della media geometrica secondo R. Vince nell'EA incluso nella consegna standard della MT basata su MA (vedi schermata). In base alle condizioni e all'ordine di calcolo di f ottimale dal libro, il suo valore è 0,36. Dopo aver terminato il codice, posterò qui la funzione con la descrizione e l'ordine di utilizzo per calcolare i volumi dei lotti aperti nei futuri scambi secondo il libro di R. Vince.
Congratulazioni per il vostro successo! :))
Grazie. Sembra che dovrò fare un array TWR, solo per essere sicuro, come mi hai consigliato.
Congratulazioni per il vostro successo! :))
punto di flesso f = 0,36, cioè come f aumenta ulteriormente, la variabile TWR - diminuisce - R. Vince ha ragione! :-)))
Ehm, come si può allegare tutto questo a un EA funzionante con una semplice definizione di dimensione del lotto in % di depo? O forse non sto guadagnando abbastanza)))
Voglio dire, è tutto un gioco mentale o ha un'applicazione pratica con un effetto positivo?
Ehm, come si può allegare tutto questo a un EA funzionante con una semplice definizione della dimensione del lotto come % del deposito? Forse non sto guadagnando abbastanza)).
Voglio dire che tutto questo è un gioco mentale o ha un'applicazione pratica con un effetto positivo?
Certo, leggi R Vince - vedi i post sopra il trailer, non l'ho ancora provato io stesso su una demo... Vedremo... :-)))
Posterò la fiya qui appena avrò finito, con una descrizione.
Certo, leggi R. Vince - vedi i post sopra nel trailer, non l'ho ancora testato io stesso su una demo... Vedremo... :-)))
Non appena avrò finito, posterò la fic qui con una descrizione.
Potresti dirmi cosa leggere del lavoro di Vince? Qual è il titolo dell'opera?
Puoi dirmi cosa leggere di Vince? Qual è il titolo dell'opera?
Scarica il trailer dal mio post a pagina 2 del thread da qui - pagine 30-32.
Credo di aver capito dove sta l'errore...
Torniamo al codice originale, che abbiamo già stravolto alcune volte:
Potrebbe essere che la variabile TWR non venga resettata a "1" ad ogni iterazione di f?
Credo di aver capito dove sta l'errore...
Torniamo al codice originale, che abbiamo già stravolto alcune volte:
Forse si tratta della variabile TWR che non viene resettata a "1" ad ogni iterazione di f?
Sì, un punto competente a proposito... Possibile... molto probabile. Lo controllerò questo pomeriggio e lo posterò qui. Grazie.
Allora non è necessario creare un array TWR (come questo - la versione fresca - neanche...
Qui ho provato tutti i tipi di esorcismi per ridurre proporzionalmente il suo valore nel prodotto (perché il suo valore assoluto non è importante, è il confronto per più/piccolo che conta), in modo da evitare l'overflow quando si calcola il f ottimale.
Ero troppo pigro per incollare il codice nell'EA e controllarlo io stesso! :)))
Non ho ancora un vero e proprio Expert Advisor. Ho solo alcune idee. Ecco perché ho preso una media mobile standard senza ottimizzarla e ho scelto un periodo redditizio.
L'ultimo codice che ho provato, quando ho capito che TWR non si resetta a "1", era il seguente:
Nessuna matrice TWR.
Aspetterete a lungo per una tracimazione! ;D Anche se forse non sarebbe successo affatto...