Каждая торговая стратегия нуждается в объективной оценке ее эффективности. Для этого используется обширный ряд статистических параметров. Многие из них просты в расчете и показывают интуитивно понятные метрики. Другие сложнее в построении и в интерпретации значений. Несмотря на все это многообразие, есть очень мало качественных метрик для...
Трейдеры часто задаются вопросом о том, как улучшить торговую систему или создать новую за счет машинного обучения. Несмотря на обилие публикаций, остается открытым вопрос о простом и интуитивно понятном способе создания моделей, которые невозможно аналитически просчитать без использования компьютерных вычислений. Нечеткая логика — это окно в...
int start()
{
int i;
int counted_bars=IndicatorCounted();
//----if(Bars<=3 ) return(0);
if (PRED_CHISLO_BAROV == Bars) return(0);
i=Bars-1;// i присваиваем значение числа баров .if(counted_bars>1) i=Bars-counted_bars-1;// while(i>=0)
{
//================================================================================================================================================================================================
MacdCurrent = iCustom( NULL, 0, "_________________",
0,i);
MacdPrevious = iCustom( NULL, 0, "_______________",
0,i+1);
SignalCurrent = iCustom( NULL, 0, "_____________",
1,i);
SignalPrevious = iCustom( NULL, 0, "_____________",
1,i+1);
MacdCurrent_Trend = iCustom( NULL, 0, "______________",
0,i);
MacdPrevious_Trend = iCustom( NULL, 0, "___________________",
0,i+1);
SignalCurrent_Trend = iCustom( NULL, 0, "__________________",
1,i);
if(Trend_InpSignalSMA==0) SignalCurrent_Trend = 0;
SignalPrevious_Trend = iCustom( NULL, 0, "_______________",
1,i+1);
if(Trend_InpSignalSMA==0) SignalPrevious_Trend = 0;
//================================================================================================================================================================================================// Оцениваем в какой позиции мы стояли бы по трендовому MACD И назначаем Trend =1 восходящий =-1 низходящийif(
MacdPrevious_Trend < 0 && //1) основная линия MACD ниже 0
MacdCurrent_Trend > SignalCurrent_Trend && MacdPrevious_Trend < SignalPrevious_Trend && //2) основная линия только что пересекла сигнальную с низу в верхMathAbs(MacdPrevious_Trend) > (Trend_MACDOpenLevel*Point) //3) основная линия ниже заданного для открытия значения
) Trend =1;
if(
MacdPrevious_Trend > 0 && // 1) основная линия MACD выше 0
MacdCurrent_Trend < SignalCurrent_Trend && MacdPrevious_Trend > SignalPrevious_Trend && //- основная линия только что пересекла сигнальную с низу в верхMathAbs(MacdPrevious_Trend) > (Trend_MACDOpenLevel*Point) // - основная линия выше заданного для открытия значения
) Trend =-1;
//================================================================================================================================================================================================//РАСЧЕТ ЛИНИИ БАЛАНСА.// Закрываем позицию SELLif(
(
Posic == -1 && // Если открыта позиция SELL
MacdPrevious < 0 && // 1) основная линия MACD ниже 0
MacdCurrent > SignalCurrent && MacdPrevious < SignalPrevious && //- основная линия только что пересекла сигнальную с низу в верхMathAbs(MacdPrevious) > (Ind_MACDCloseLevel*Point) // - основная линия ниже заданного для закрытия значения
) || (
Posic == -1 && (Cena_0 - Open[i])/Point * Naprav >= TakeProfit
) || (
Posic == -1 && (Open[i] - Cena_0)/Point * Naprav >= StopLoss
)
)
{
if( Cena_0 > 0 ) Balans = Balans +(Cena_0 -Open[i])/Point * Naprav ;
Cena_0 = 0; Posic = 0; Capital = 0 ;
}
// Открываем позицию BUYif(
Trend == 1 &&
Posic == 0 && // Если позиция зарыта
MacdPrevious < 0 && // 1) основная линия MACD ниже 0
MacdCurrent > SignalCurrent && MacdPrevious < SignalPrevious && //- основная линия только что пересекла сигнальную с низу в верхMathAbs(MacdPrevious) > (Ind_MACDOpenLevel*Point) // - основная линия ниже заданного для открытия значения
)
{ Cena_0 = Open[i]; Posic = 1; Balans = Balans - Spred; }
// Закрываем позицию BUYif(
(
Posic == 1 && // Если открыта позиция BUY
MacdPrevious > 0 && // 1) основная линия MACD выше 0
MacdCurrent < SignalCurrent && MacdPrevious > SignalPrevious && //- основная линия только что пересекла сигнальную с верх в низу MathAbs(MacdPrevious) > (Ind_MACDCloseLevel*Point) // - основная линия выше заданного для закрытия значения
) || (
Posic == 1 && (Cena_0 - Open[i])/Point * Naprav >= StopLoss
) || (
Posic == 1 && (Open[i] - Cena_0)/Point * Naprav >= TakeProfit
)
)
{
if( Cena_0 > 0 ) Balans = Balans +(Open[i] - Cena_0)/Point * Naprav ;
Cena_0 = 0; Posic = 0; Capital = 0 ;
}
// Открываем позицию SELLif(
Trend == -1 &&
Posic == 0 && // Если позиция зарыта
MacdPrevious > 0 && // 1) основная линия MACD выше 0
MacdCurrent < SignalCurrent && MacdPrevious > SignalPrevious && //- основная линия только что пересекла сигнальную с верх в низу MathAbs(MacdPrevious) > (Ind_MACDOpenLevel*Point) // - основная линия выше заданного для открытия значения
)
{ Cena_0 = Open[i]; Posic = -1; Balans = Balans - Spred; }
a1_Buffer[i]= Balans;
//================================================================================================================================================================================================//РАСЧЕТ ЛИНИИ ТЕКУЩЕГО КАПИТАЛЛА.// При открытой позиции BUYif( Posic > 0 )
{
if( Cena_0 > 0 ) Capital = ((Open[i] - Cena_0)/Point * Naprav) ;
}
// При открытой позиции SELLif( Posic < 0 )
{
if( Cena_0 > 0 ) Capital = ((Cena_0 -Open[i])/Point * Naprav) ;
}
a2_Buffer[i]= Balans + Capital;
//================================================================================================================================================================================================// a3_Buffer[i]= //================================================================================================================================================================================================// a4_Buffer[i]=//================================================================================================================================================================================================//================================================================================================================================================================================================if (i >= Bars-(TOCHKA_VHODA*2)) Cena_0 = 0;//
i--; PRED_CHISLO_BAROV = Bars;
}
//----return(0);
}
//+------------------------------------------------------------------+
バランス指標を作った 経験があるのですが、これはハイパーパラメーターを作ることに近いでしょうか?
もし、本当に相関関係がないのであれば、何の役にも立たないかもしれません。)
しかし、本当に相関があるかどうかはわかりませんし、役に立たないかもしれません。)
:)
念のため、写真、バランスインジケーター(下窓)。
着実なステップのバランス、緑のラインの意味。
:)
念のため、写真、バランスインジケーター(下窓)。
着実なステップのバランス、緑のラインの意味。
うおぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉぉ
+
:)
念のため、写真、バランスインジケーター(下窓)。
着実なステップのバランス、緑のラインの意味。
バランスは絶対値 でなく、例えば、現在の利益率...つまり、何とかグラフを正規化することが必要です
そして,その変数と残りの変数とを,ファジーロジックやニューロンなどを使って,何らかの形で関連付けることができる.
R^2があると助かる
https://www.mql5.com/ru/articles/2358
次に、入力項として指標と R^2 を追加し、変数間の相互作用のルールを言語的に記述し、出力でシグナルを取得する
これは単なる例で、ニューロンも使えますが(記事もあります)、ファジーロジックはこれらのタスクに対してより柔軟で直感的なように思いますし、ニューロンやパラメータとして最適化することもできますが、直感性は低くなります
https://www.mql5.com/ru/articles/3795
メッセージをありがとうございました。
残念ながら、今のところ、私は機械学習に精通しているわけではありません。そして、いつまで経ってもマスターできない。
バランスインジケータを使用して、連続的な最適化を迅速に行うことを計画していました。残念ながら、バランスインジケータの類似品と、Expert Advisorごとにパラメータを検索するスクリプトを開発する必要があります。これらのアルゴリズムをロボットに搭載して、自動最適 化を行うのが現実的だと思います。原理的には、同じ機械学習でも自作レベルなのでしょう。
もしかしたら、私も手を出すかもしれません。
その間に、誰かが私の持っているものを役に立つと思うかもしれません。MT4用バランスインジケータ。
P/S.このスレッドに似たようなインジケータの例を追加していただけるとありがたいです。コピーするExpert Advisorと一緒に使うとよりよいでしょう。
スラングもなしで?:))))))
現在のパラメータで履歴のある深さのバランスグラフを計算し、それが悪ければライブで修正し、再びカーブを見る...最適になるまで、再び下がり始めるまでトレードし、再びパラメータを見直す...この場合、バックテストはもちろん長くなります。
ありがとうございます。
しかし、100万個のハンドルがあり、Expert Advisor本体のインジケータをすべて書き直さなければならないでしょう。