Spread trading in Meta Trader - pagina 78

 
e non credo che le valute siano l'opzione migliore, max audi e kiwi
 

Ecco la funzione di calcolo del lotto dinamico per entrambi gli strumenti, utilizzando il codice neoclassico.

Da usare negli EA. Controllate, è tutto a posto?

Il parametro Rischio è la percentuale che rischiamo.

Parametri:

extern string Symbol_1 = "6EM0";
extern string Symbol_2 = "6SM0";
extern double Risk = 10;
string lotsinfo;
double Lots_1; double Lots_2;

Codice:

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);
}

 

Inserito. Grazie!

Sembra funzionare bene!


 
rid >>:

Вставил. Благодарю!

Вроде нормально работает!

Aha... Dovremmo normalizzare la dimensione del lotto con gli incrementi di lotto dello strumento... Perché il lotto 0.1831 non funziona... Giusto...

 
Jahspear >>:

Ага... Надо нормализовать размерность лота с шагом лота по инструменту... А то лот 0,1831 не тру... Щас...

Questo blocco dovrebbe essere fatto in questo modo, e il numero di lotti sarà corretto.

//приведение размера лотов 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); //больший по соотношению нормализуем
}

 
Vorrei chiedere a tutti coloro che sono bravi a programmare.sotto esperto, trawling profitto.qualcuno può inserire un blocco per trawl il profitto effettivo su tickers e visualizzarlo nel commento.io che non funziona.grazie in anticipo
File:
archive.zip  5 kb
 
Jahspear >>:

Ага... Надо нормализовать размерность лота с шагом лота по инструменту... А то лот 0,1831 не тру... Щас...

Ciao a tutti, da tempo osservatore del ramo, per il dimensionamento del lotto suggerisco un'opzione leggermente diversa:

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 :)
 

Anche l'approccio non è male. Solo che non hai mostrato - come calcolare programmaticamente

(Mediana(simbolo_1) e Mediana(simbolo_2).

A proposito, come verrebbero calcolati i lotti in tandem GCG0+UMH0 secondo il tuo algoritmo?

 
rid >>:

Кстати, как по вашему алгоритму получились бы лоты тандема GCG0+УMH0 ?

eppure il mio vecchio metodo di sincronizzazione dei lotti è più corretto

inserire il lotto di base e due strumenti nelle impostazioni, lanciare lo script sul grafico e il gioco è fatto...



File:
lotsu-v2.ex4  3 kb
 

Cibo per la mente: Exchange Traded Funds (ETFs)

Potrebbe essere interessante ottenere una quota di questo fondo:

MKT VCTR RUSSIA SBI