Spread trading in Meta Trader - page 78

 
and I don't think currencies are the best option, max audi and kiwi
 

Here is the dynamic lot calculation function for both instruments, using neoclassic code.

To use in EAs. Check it, is it OK?

The Risk parameter is the percentage that we risk.

Parameters:

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

Code:

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

 

Inserted. Thank you!

Seems to be working fine!


 
rid >>:

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

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

Aha... We should normalise the lot size with the lot increments of the instrument... Because lot 0.1831 isn't working... Right...

 
Jahspear >>:

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

This block should be done this way, and the number of lots will be correct.

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

 
I would like to ask everyone who is good at programming.below expert, trawling profit.can someone insert a block to trawl the actual profit on tickers and display it in the comment.me that that does not work.thank you in advance
Files:
archive.zip  5 kb
 
Jahspear >>:

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

Hi all, long time watcher of the thread, I suggest a slightly different option for lot sizing:

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

Not a bad approach either. Only you haven't shown - how to calculate programmatically

(Mediana(symbol_1) and Mediana(symbol_2).

By the way, how would the GCG0+UMH0 tandem lots be calculated according to your algorithm?

 
rid >>:

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

and yet my old method of lot synchronisation is more correct

enter the base lot and two instruments into the settings, throw the script on the chart and you're done...



Files:
lotsu-v2.ex4  3 kb
 

Food for thought : Exchange Traded Funds (ETFs)

It might be interesting to get a hold of this fund:

MKT VCTR RUSSIA SBI



Reason: