Расчет TickValue и прибыли - страница 7

 
Andrey Kaunov #:

Согласен. Но тогда нужна функция возвращающая стоимость ПУНКТА.

Но кстати на Золоте ТИК и ПУНКТ равны.

Здесь неправ я был. 

Стоимость ПУНКТА сможем рассчитать мы по этой формуле. Не нужна такая функция.

double point_value=SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE)/SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol, SYMBOL_POINT);
Но нужно получать верные значения 
SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE)

от брокера, чтобы рассчитать стоимость пункта верно. Вот о чём речь здесь идет. А сегодня опять столкнулся с неверными данными. Опять у ALPARI на инструменте NQ100 выдаёт стоимость пункта 0.1

 

При том что она составляет 1.0

 

Это Alpari MT4 Demo
 
Andrey Kaunov #:

Здесь неправ я был. 

Стоимость ПУНКТА сможем рассчитать мы по этой формуле. Не нужна такая функция.

Но нужно получать верные значения 

от брокера, чтобы рассчитать стоимость пункта верно. Вот о чём речь здесь идет. А сегодня опять столкнулся с неверными данными. Опять у ALPARI на инструменте NQ100 выдаёт стоимость пункта 0.1

 

При том что она составляет 1.0

 

Это Alpari MT4 Demo

В таких случаях приходится учитывать:

SymbolInfoDouble(Symbol(), SYMBOL_TRADE_CONTRACT_SIZE)

Он там как раз равен 10:


 
И какая будет итоговая формула?
 
Andrey Kaunov #:
И какая будет итоговая формула?

)) Для стоимости тика:

SymbolInfoDouble(Symbol(), SYMBOL_TRADE_CONTRACT_SIZE) * SymbolInfoDouble(Symbol(), SYMBOL_TRADE_TICK_VALUE)
 
Ihor Herasko #:

)) Для стоимости тика:

А какую роль тут имеет Размер контракта?

Как же для Евро, например, считать?


 
Andrey Kaunov #:

А какую роль тут имеет Размер контракта?

Как же для Евро, например, считать?


У евро другой способ расчета: Forex (стоимость тика указывается для 1-го лота). А мы говорим про способ расчета CFD (стоимость тика указывается для единицы контракта).

 

ладно не парьтесь

подшаманьте и вперед

стоимость пункта на баре номер  Shift

tVOL = MarketInfo( SYMB ,MODE_LOTSIZE);

tPNT = SymbolInfoDouble(SYMB,SYMBOL_POINT);


// ------------------------ СТОИМОСТЬ ПУНКТА

double calcTV(string SYMB, double tVOL, double tPNT, int Shift)

{

//

   double Res=0,Price=0;

   datetime t0;

   int bs;

   if(StringSubstr(SYMB,3,3)=="USD")Res=tVOL*tPNT;

   if(StringSubstr(SYMB,0,3)=="USD")

   {

      Price=iClose(SYMB,Period(),Shift);

      Res=tVOL*tPNT/Price;

   }

   if(StringSubstr(SYMB,0,3)!="USD" && StringSubstr(SYMB,3,3)!="USD")

   {

      if(StringSubstr(SYMB,3,3)=="AUD" || StringSubstr(SYMB,3,3)=="EUR" || StringSubstr(SYMB,3,3)=="GBP" || StringSubstr(SYMB,3,3)=="NZD")

      {

         SYMB=StringSubstr(SYMB,3,3)+"USD";

         t0=iTime(SYMB,Period(),Shift);

         bs=iBarShift(SYMB,Period(),t0);

         if(bs<0 || iClose(SYMB,Period(),bs)==0)return(0);

         Price=1.0/iClose(SYMB,Period(),bs);

         if(Price==0.0)Price=1.0/MarketInfo(SYMB,MODE_BID);

      }

      if(StringSubstr(SYMB,3,3)=="CAD" || StringSubstr(SYMB,3,3)=="CHF" || StringSubstr(SYMB,3,3)=="JPY")

      {

         SYMB="USD"+StringSubstr(SYMB,3,3);

         t0=iTime(SYMB,Period(),Shift);

         bs=iBarShift(SYMB,Period(),t0);

         Price=iClose(SYMB,Period(),bs);

         if(Price==0.0)Price=MarketInfo(SYMB,MODE_BID);

      }

      if(Price!=0)Res=tVOL*tPNT/Price;

   }

   return(Res);

}

 

С валютными парами вообще не проблема, Ренат.

Задача на крипте определить или на Индексах к примеру.

 
Andrey Kaunov #:

С валютными парами вообще не проблема, Ренат.

Задача на крипте определить или на Индексах к примеру.

оч странно Вы себя ведете .....


и тут

....

Судя по этим двум постам, проблема как раз была 
 
Renat Akhtyamov #:

оч странно Вы себя ведете .....


и тут

....

Судя по этим двум постам, проблема как раз была 
Вы не так поняли, Ренат. Евро я привёл только для примера, т.к. Игорь написал, как мне казалось, универсальную формулу для всех инструментов. 

Но все равно спасибо за функцию. 
Причина обращения: