[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 188

 

Пытаюсь рассчитать своп, но не получается

Вот код который выводит свопы 20 последних сделок.

for ( int j=OrdersHistoryTotal( )-1; j>=OrdersHistoryTotal( )-21; j--) {
OrderSelect(j, SELECT_BY_POS, MODE_HISTORY);
if(OrderType()==OP_BUY)
Alert(OrderSymbol()+" ЛОТ = "+OrderLots()+" РЕАЛЬНЫЙ СВОП = "+OrderSwap()+" РАСЧЕТНЫЙ СВОП "+MarketInfo(OrderSymbol(),MODE_SWAPLONG)*MarketInfo(OrderSymbol(),MODE_BID)*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE));
if(OrderType()==OP_SELL)
Alert(OrderSymbol()+" ЛОТ = "+OrderLots()+" РЕАЛЬНЫЙ СВОП = "+OrderSwap()+" РАСЧЕТНЫЙ СВОП "+MarketInfo(OrderSymbol(),MODE_SWAPSHORT)*MarketInfo(OrderSymbol(),MODE_BID)*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE));
}

Но расчетный своп и реальный отличаются. Дело не в том, что цена бид уже никогда не будет прежней, дело не в десятитысячных.

Почему то отличие кратно именно 10.

То есть расчетный своп в 10 раз превышает реальный.

Сам уже не могу догадаться в чем тут дело.

MarketInfo(OrderSymbol(),MODE_SWAPTYPE) возвращает единицу, то есть

«Метод вычисления свопов 1 - в базовой валюте инструмента;»

Я беру значения свопа в пунктах, которое возвращает

MarketInfo(OrderSymbol(),MODE_SWAPLONG)

Умножаю это значение на Bid,

*MarketInfo(OrderSymbol(),MODE_BID)

затем на размер лота

*OrderLots()

и умножаю на ценность одного пункта в валюте депозита с одного лота

*MarketInfo(OrderSymbol(),MODE_TICKVALUE)

Возвращаются такие значения:

EURGBP ЛОТ = 0.46000000 РЕАЛЬНЫЙ СВОП = -1.31000000 РАСЧЕТНЫЙ СВОП -13.05244609

 

Подскажите, пожалуйста, как это делается))

double MA1,MA2;

MA1=iMA(....,0);

MA2=iMA(....,3);

if (MA1-MA2>Point)//МА смотрит вверх

if (MA1-MA2,-Point)//МА смотрит вниз

 
vasya_vasya писал(а) >>

Умножаю это значение на Bid,

*MarketInfo(OrderSymbol(),MODE_BID)

А это зачем?

 
Roger >>:

Подскажите, пожалуйста, как это делается))

double MA1,MA2;

MA1=iMA(....,0);

MA2=iMA(....,3);

if (MA1-MA2>Point)//МА смотрит вверх

if (MA1-MA2,-Point)//МА смотрит вниз

Большое спасибо))

 
Roger писал(а) >>

А это зачем?

Ни где не нашел описания того значения, что возвращает

MarketInfo(OrderSymbol(),MODE_SWAPLONG)

Сделал вывод, что это размер пунктов именно EUR в котировке EURGBP , поэтому, чтобы получить сколько это в GBP, я умножил на BID

Дело в том, что

MarketInfo(OrderSymbol(),MODE_TICKVALUE)

Возвращает стоимость пункта на один лот именно для GBP в котировке EURGBP, а не для EUR.

 
vasya_vasya писал(а) >>

Ни где не нашел описания того значения, что возвращает

Мне почему-то все время казалось, что все расчеты идут в валюте депозита.
 
Roger писал(а) >>
Мне почему-то все время казалось, что все расчеты идут в валюте депозита.

Функция MarketInfo(OrderSymbol(),MODE_SWAPSHORT)

Возвращает целое значение -2, так же как и для всех других ордеров. Следовательно, предполагаю, что это значение пунктов.

Предположим что это значение свопа выраженного в пунктах нашей валюты депозита.

Валюта депозита = USD

Умножаем

MarketInfo(OrderSymbol(),MODE_SWAPSHORT)

На количество лотов

*OrderLots()

Также умножаем на стоимость одного пункта валюты депозита на одном лоте

*10

Получаем

СВОП = -9.20000000

Вместо

РЕАЛЬНЫЙ СВОП = -1.31000000

 
vasya_vasya писал(а) >>

Функция MarketInfo(OrderSymbol(),MODE_SWAPSHORT)

Возвращает целое значение -2, так же как и для всех других ордеров. Следовательно, предполагаю, что это значение пунктов.

У меня для EURGBP возвращает - 0 (это Альпари) шорт и -0.68 лонг и это точно в долларах.

 
профи подскажите пожалуйста, согласно справке по языку mql5 там нет функции iHighest как рассчитать максимальный хай за N период??? ..нужно написать функцию самостоятельно,..попробовал через copyHigh и fmax, но так лишь для определенного периода и не то конечно, помогите
 

Грубо говоря так:

double HighestBar(int start, int end)
{
double maxBar;
for (int i=start;i<end;i++)
if(maxBar<High[i])maxBar=High[i];
return(maxBar);
}
Причина обращения: