Стратегии и роботы > Робот для торговли фьючерсами. Оптимизация стратегии.
Re: Робот для торговли фьючерсами. Оптимизация стратегии.
Из таблицы котировок берем значения "цена шага" и "шаг".
Коэффициент перевода из пунктов в рубли
К = "цена шага" / "шаг" = 6,32317 / 0,01 = 632,317
https://www.moex.com/ru/contract.aspx?code=BR-8.19
Комиссия биржи в 0,925 рублей. Общая комиссия в 2*0,925 = 1.85 рубля.
Комиссия в пунктах = 1,85 / 632 = 0,0029 (не проценты)
Коэффициент перевода из пунктов в рубли
К = "цена шага" / "шаг" = 6,32317 / 0,01 = 632,317
https://www.moex.com/ru/contract.aspx?code=BR-8.19
Комиссия биржи в 0,925 рублей. Общая комиссия в 2*0,925 = 1.85 рубля.
Комиссия в пунктах = 1,85 / 632 = 0,0029 (не проценты)
Re: Робот для торговли фьючерсами. Оптимизация стратегии.
MATrail с двумя параметрами
Код: Выделить всё
function Initialize()
{
IndicatorName = "MATrail2Period";
PriceStudy = true;
AddInput("Input", Inputs.Price);
AddParameter("PeriodLong", 50, 1);
AddParameter("PeriodShort", 50, 1);
AddSeries("MATrail", DrawAs.Line, Color.Blue);
AddGlobalVariable("MA", Types.Double, 0.0);
AddGlobalVariable("Flag", Types.Int, 1);
AddGlobalVariable("MinPrice", Types.Double, 100000000000.0);
AddGlobalVariable("MaxPrice", Types.Double, 0.0);
}
function Evaluate()
{
// Alfadirect 2019. OX
// Cледящий трендовый индикатор - модификацированный EMA
if (CurrentIndex <= Math.Max(PeriodLong, PeriodShort) )
{
MATrail = Input[0];
MA = Input[0];
}
else
{
double K0 = 0;
double K1 = 0;
double std = 0;
double e = 0;
// падение ************************************
if (Flag < 0)
{
K0 = 2.0/((double)PeriodShort + 1.0);
K1 = 1.0 - K0;
std = 3.0*LIB.STD(Input, PeriodShort)[0];
e = Math.Abs(Input[0] - MA);
if (Input[0] <= MinPrice || e > std)
{
MinPrice = Input[0];
MA = K1 * MA + K0 * Input[0];
}
if (Input[0] > MA )
{ Flag = 1;
MaxPrice = Input[0];
if (Input[0] - MinPrice < 1.0*std)
MA = MinPrice;
else
MA = Input[0] - std;
}
}
// рост ****************************************
else if (Flag > 0)
{
K0 = 2.0/((double)PeriodLong + 1.0);
K1 = 1.0 - K0;
std = 3.0*LIB.STD(Input, PeriodLong)[0];
e = Math.Abs(Input[0] - MA);
if (Input[0] >= MaxPrice || e > std)
{
MaxPrice = Input[0];
MA = K1 * MA + K0 * Input[0];
}
if (Input[0] < MA )
{ Flag = -1;
MinPrice = Input[0];
if (MaxPrice - Input[0] < 1.0*std)
MA = MaxPrice;
else
MA = Input[0] + std;
}
}
// отображение ряда ************************************
MATrail = MA;
}
}
Re: Робот для торговли фьючерсами. Оптимизация стратегии.
oxi писал(а):MATrail с двумя параметрамиКод: Выделить всё
function Initialize()
{
IndicatorName = "MATrail2Period";
PriceStudy = true;
AddInput("Input", Inputs.Price);
AddParameter("PeriodLong", 50, 1);
AddParameter("PeriodShort", 50, 1);
AddSeries("MATrail", DrawAs.Line, Color.Blue);
AddGlobalVariable("MA", Types.Double, 0.0);
AddGlobalVariable("Flag", Types.Int, 1);
AddGlobalVariable("MinPrice", Types.Double, 100000000000.0);
AddGlobalVariable("MaxPrice", Types.Double, 0.0);
}
function Evaluate()
{
// Alfadirect 2019. OX
// Cледящий трендовый индикатор - модификацированный EMA
if (CurrentIndex <= Math.Max(PeriodLong, PeriodShort) )
{
MATrail = Input[0];
MA = Input[0];
}
else
{
double K0 = 0;
double K1 = 0;
double std = 0;
double e = 0;
// падение ************************************
if (Flag < 0)
{
K0 = 2.0/((double)PeriodShort + 1.0);
K1 = 1.0 - K0;
std = 3.0*LIB.STD(Input, PeriodShort)[0];
e = Math.Abs(Input[0] - MA);
if (Input[0] <= MinPrice || e > std)
{
MinPrice = Input[0];
MA = K1 * MA + K0 * Input[0];
}
if (Input[0] > MA )
{ Flag = 1;
MaxPrice = Input[0];
if (Input[0] - MinPrice < 1.0*std)
MA = MinPrice;
else
MA = Input[0] - std;
}
}
// рост ****************************************
else if (Flag > 0)
{
K0 = 2.0/((double)PeriodLong + 1.0);
K1 = 1.0 - K0;
std = 3.0*LIB.STD(Input, PeriodLong)[0];
e = Math.Abs(Input[0] - MA);
if (Input[0] >= MaxPrice || e > std)
{
MaxPrice = Input[0];
MA = K1 * MA + K0 * Input[0];
}
if (Input[0] < MA )
{ Flag = -1;
MinPrice = Input[0];
if (MaxPrice - Input[0] < 1.0*std)
MA = MaxPrice;
else
MA = Input[0] + std;
}
}
// отображение ряда ************************************
MATrail = MA;
}
}
При добавлении получаем сообщение : ошибка компиляции , не найдена закрывающая скобка в OnUpdate
- evge
- Администратор
- Сообщения: 1812
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: Робот для торговли фьючерсами. Оптимизация стратегии.
Это индикатор
никогда такого не было и вот опять
Re: Робот для торговли фьючерсами. Оптимизация стратегии.
Это был индикатор.
В стратегия меняется только индикатор
В стратегия меняется только индикатор
Код: Выделить всё
function Initialize()
{
StrategyName = "forts_MATrail2";
AddInput("Input1", Inputs.Candle, 1, true, "SIU9=ФОРТС");
AddParameter("PeriodLong", 61, "Период на лонг", 1);
AddParameter("PeriodShort", 25, "Период на шорт", 1);
AddChartIndicator("MY.MATrail2Period", new Dictionary <string, string>{{"PeriodLong", "PeriodLong"}, {"PeriodShort", "PeriodShort"}});
}
function OnUpdate()
{
var line = MY.MATrail2Period(Input1.Close, PeriodLong, PeriodShort);
double pos = CurrentPosition();
if ( Input1.Close[0] > line[0] && Input1.Close[1] <= line[1] && pos <= 0 )
{
EnterLong();
}
if ( Input1.Close[0] < line[0] && Input1.Close[1] >= line[1] && pos >= 0 )
{
EnterShort();
}
}
-
- Сообщения: 11
- Зарегистрирован: 25 апр 2023, 18:12
- Благодарил (а): 3 раза
Re: Робот для торговли фьючерсами. Оптимизация стратегии.
Какой отличный индикатор.
Есть какие то новые модификации его?
или новые фишки в параметрах.
Поделитесь кто может.
Подскажите на каком тайфрейме лучше всего его применять
Есть какие то новые модификации его?
или новые фишки в параметрах.
Поделитесь кто может.
Подскажите на каком тайфрейме лучше всего его применять
Вернуться в «Стратегии и роботы»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей