Каждая торговая стратегия нуждается в объективной оценке ее эффективности. Для этого используется обширный ряд статистических параметров. Многие из них просты в расчете и показывают интуитивно понятные метрики. Другие сложнее в построении и в интерпретации значений. Несмотря на все это многообразие, есть очень мало качественных метрик для...
Трейдеры часто задаются вопросом о том, как улучшить торговую систему или создать новую за счет машинного обучения. Несмотря на обилие публикаций, остается открытым вопрос о простом и интуитивно понятном способе создания моделей, которые невозможно аналитически просчитать без использования компьютерных вычислений. Нечеткая логика — это окно в...
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
谢谢你的留言。
不幸的是,目前,我对机器学习并不熟悉。而且我不打算很快掌握它。
我打算用平衡指标来进行快速的持续优化。不幸的是,我们必须为每个专家顾问开发一个平衡指标的类似物和一个搜索参数的脚本。我认为将这些算法纳入机器人进行自动优化 是现实的。原则上,这可能是相同的机器学习,但在自制的层面上。
也许我也会有机会去做。
同时,也许有人会发现我的东西很有用。MT4的平衡指标。
P/S. 如果你能在这个主题中加入一些类似指标的例子,我将非常感激。它与它所复制的专家顾问一起使用会更好。
而且没有俚语?:))))))
通过当前参数计算出一定历史深度的平衡图,如果不好,就现场修正,然后再次观察曲线......直到它变成最佳状态,然后进行交易,直到它再次开始下降,然后再次查看参数......在这种情况下,回测当然会很长。
谢谢你。
但会有一百万个手柄,我将不得不重写专家顾问体内的所有指标。