//приведение размера лотов Lots_1/Lots_2 к нужному соотношению LotS1/LotS2, учитывая Lot1 и Lot2
if (LotsS1<=LotsS2) { Lots_1=Lot1; //меньший по соотношению оставляем как есть Lots_2=Lot1/LotsS1*LotsS2; //больший по соотношению нормализуем } else { Lots_2=Lot2; //меньший по соотношению оставляем как есть Lots_1=Lot2*LotsS1/LotsS2; //больший по соотношению нормализуем }
//проверяем возможность торговать
if ((Lots_1<Min_Lot1)||(Lots_2<Min_Lot2)) string lotsalert=StringConcatenate("Нет средств для торговли с Risk=",Risk,"%.\n"); else lotsalert="";
Ага... Надо нормализовать размерность лота с шагом лота по инструменту... А то лот 0,1831 не тру... Щас...
このブロックはこのようにすれば、ロット数が正しくなります。
//приведение размера лотов Lots_1/Lots_2 к нужному соотношению LotS1/LotS2, учитывая Lot1 и Lot2
int Step; if (LotsS1<=LotsS2) { Step = MathCeil(MathAbs(MathLog(Step2)/MathLog(10))); Lots_1=Lot1; //меньший по соотношению оставляем как есть Lots_2=NormalizeDouble((Lot1/LotsS1*LotsS2),Step); //больший по соотношению нормализуем } else { Step = MathCeil(MathAbs(MathLog(Step1)/MathLog(10))); Lots_2=Lot2; //меньший по соотношению оставляем как есть Lots_1=NormalizeDouble((Lot2*LotsS1/LotsS2),Step); //больший по соотношению нормализуем }
lot2 =
lot1 *(MarketInfo( symbol_1,MODE_TICKVALUE)/MarketInfo( symbol_2,MODE_TICKVALUE))*// отношение размеров тиков в валюте депозита( Mediana( symbol_1)/ Mediana( symbol_2))*// отношение медиан движения инструментов(MarketInfo( symbol_2,MODE_TICKSIZE)/MarketInfo( symbol_1,MODE_TICKSIZE))*// отношение размерности тиков(MarketInfo( symbol_1,MODE_TICKSIZE)*MarketInfo( symbol_1,MODE_LOTSIZE))/// стоимость пункта 1-го инструмента(MarketInfo( symbol_2,MODE_TICKSIZE)*MarketInfo( symbol_2,MODE_LOTSIZE)// стоимость пункта 2-го инструмента// Медиана - это среднее значение без экстремальных// т.е. в данном случае суммируем (хай-лоу) дневных свечек за какое-то количество дней (например 30), отбрасываем пару самых больших и самых малых значений и усредняем.// по DAX-FTSE кстати соотношение лотов получается примерно 1:2.8 :)
以下は、新古典派 コードによる両商品の動的ロット計算機能です。
EAで使用するため。確認してください、大丈夫ですか?
リスクパラメータは、リスクを負う割合です。
パラメータ
extern string Symbol_1 = "6EM0";
extern string Symbol_2 = "6SM0";
extern double Risk = 10;
string lotsinfo;
double Lots_1; double Lots_2;
コード
void CountLots()
{
//расчет соотношения лотов по инструментам
double ynax=MarketInfo(Symbol_1, MODE_TICKVALUE)/MarketInfo(Symbol_2, MODE_TICKVALUE)*
(iOpen(Symbol_1,0,0)/MarketInfo(Symbol_1, MODE_TICKSIZE))/(iOpen(Symbol_2,0,0)/MarketInfo(Symbol_2, MODE_TICKSIZE));
double minx=0, miny=0, mindelta=9999;
for (double x=0.01; x<=1; x+=0.01)
{
for (double y=0.01; y<=1; y+=0.01)
{
double delta=MathAbs(y/x-ynax);
if (delta<mindelta)
{
minx=x;
miny=y;
mindelta=delta;
}
}
}
double LotsS1=minx;
double LotsS2=miny;
//расчет динамического лота с заданным параметром Risk
string Symb1=Symbol_1;
string Symb2=Symbol_2;
double Min_Lot1=MarketInfo(Symb1,MODE_MINLOT);// Мин. размер лота
double Min_Lot2=MarketInfo(Symb2,MODE_MINLOT);// Мин. размер лота
double Step1 =MarketInfo(Symb1,MODE_LOTSTEP);//Шаг изменен лотов
double Step2 =MarketInfo(Symb2,MODE_LOTSTEP);//Шаг изменен лотов
double Free =AccountFreeMargin(); // Свободн средства
double One_Lot1=MarketInfo(Symb1,MODE_MARGINREQUIRED);//Стоим.1 лота
double One_Lot2=MarketInfo(Symb2,MODE_MARGINREQUIRED);//Стоим.1 лота
double Lot1=MathFloor(Free*Risk/100/One_Lot1/Step1)*Step1;// Лоты
double Lot2=MathFloor(Free*Risk/100/One_Lot2/Step2)*Step2;// Лоты
//приведение размера лотов Lots_1/Lots_2 к нужному соотношению LotS1/LotS2, учитывая Lot1 и Lot2
if (LotsS1<=LotsS2)
{
Lots_1=Lot1; //меньший по соотношению оставляем как есть
Lots_2=Lot1/LotsS1*LotsS2; //больший по соотношению нормализуем
}
else
{
Lots_2=Lot2; //меньший по соотношению оставляем как есть
Lots_1=Lot2*LotsS1/LotsS2; //больший по соотношению нормализуем
}
//проверяем возможность торговать
if ((Lots_1<Min_Lot1)||(Lots_2<Min_Lot2))
string lotsalert=StringConcatenate("Нет средств для торговли с Risk=",Risk,"%.\n");
else lotsalert="";
//выводим информацию в строку
lotsinfo=StringConcatenate(lotsalert,
"Risk = ",Risk,"%. Лот ",Symbol_1," = ",Lots_1,", Лот ",Symbol_2," = ",Lots_2,".\n");
//Comment(lotsinfo);
}
挿入される。ありがとうございました。
正常に動作しているようです
Вставил. Благодарю!
Вроде нормально работает!
嗚呼...商品のロット単位でロットサイズを正規化すべき...。ロット0.1831が動かないから...。そうですね...
Ага... Надо нормализовать размерность лота с шагом лота по инструменту... А то лот 0,1831 не тру... Щас...
このブロックはこのようにすれば、ロット数が正しくなります。
//приведение размера лотов Lots_1/Lots_2 к нужному соотношению LotS1/LotS2, учитывая Lot1 и Lot2
int Step;
if (LotsS1<=LotsS2)
{
Step = MathCeil(MathAbs(MathLog(Step2)/MathLog(10)));
Lots_1=Lot1; //меньший по соотношению оставляем как есть
Lots_2=NormalizeDouble((Lot1/LotsS1*LotsS2),Step); //больший по соотношению нормализуем
}
else
{
Step = MathCeil(MathAbs(MathLog(Step1)/MathLog(10)));
Lots_2=Lot2; //меньший по соотношению оставляем как есть
Lots_1=NormalizeDouble((Lot2*LotsS1/LotsS2),Step); //больший по соотношению нормализуем
}
Ага... Надо нормализовать размерность лота с шагом лота по инструменту... А то лот 0,1831 не тру... Щас...
皆さんこんにちは、このスレッドを長く見ている者です、私はロットサイジングについて少し変わったオプションを提案します。
やり方も悪くはない。プログラムによる計算方法を示していないだけです。
(Mediana(symbol_1)とMediana(symbol_2))です。
ところで、GCG0+UMH0タンデムロットは、先生のアルゴリズムではどのように算出されるのでしょうか?
Кстати, как по вашему алгоритму получились бы лоты тандема GCG0+УMH0 ?
とはいえ、私の古いロットシンクロの方法の方がより正しい
基本ロットと2つの商品を設定に入力し、チャートにスクリプトをドロップして完了です。
Food for thought :ETF(上場投資信託)
このファンドを手にするのも面白いかもしれない。
MKT VCTR ロシア SBI