¡¡¡¡MODE_TICKVALUE -- LIES!!!! :) - página 3

 
SProgrammer писал(а) >>

Soy algo inteligente, ya sabes :) - Lo estaba ejecutando en el probador. No puede haber nada indeterminado ahí.

He puesto un ejemplo: ¿puedes calcularlo a mano? También te he dado la respuesta de Marketinfo.

Hay una calculadora JavaScript en las páginas web de muchas empresas de corretaje, puedes copiarla y ver cómo calcular correctamente.

 

Para los pares de divisas en los que la moneda de cotización es la misma que la de depósito

MarketInfo(Symbol(),MODE_LOTSIZE)*MarketInfo(Symbol(),MODE_TICKSIZE) 

en la versión ampliada tendrá que analizar la moneda de la cotización...

 

Depo moneda USD, tirar código en el gráfico USDJPY, las lecturas son las mismas

MarketInfo(Symbol(),MODE_LOTSIZE)*MarketInfo(Symbol(),MODE_TICKSIZE) )/MarketInfo(Symbol(),MODE_BID)
Así que podemos confiar en el gusano de las cosquillas...
 
SProgrammer >>:

Вы ручками считать проверяли?

Sólo sé cómo hacerlo automáticamente:

#property show_inputs

extern string BaseCurrency = "USD";

bool RealSymbol( string Str )
{
  return(MarketInfo( Str, MODE_BID) != 0);
}

double GetTickValue( string Symb, bool Average )
{
  string Str, ProfitCurrency, SymbolPrefix;
  double Res, PriceExchage;
  
  ProfitCurrency = StringSubstr( Symb, 3, 3);
  SymbolPrefix = StringSubstr( Symb, 6);
  
  if ( ProfitCurrency == BaseCurrency)
    Res = MarketInfo( Symb, MODE_LOTSIZE) * MarketInfo( Symb, MODE_TICKSIZE);
  else
  {
    Str = BaseCurrency + ProfitCurrency + SymbolPrefix;
    
    if ( RealSymbol( Str))
    {
      if ( Average)
        PriceExchage = (MarketInfo( Str, MODE_BID) + MarketInfo( Str, MODE_ASK)) / 2;
      else
//        PriceExchage = MarketInfo(Str, MODE_BID); // Так считает MetaTrader4 - неправильно
        PriceExchage = MarketInfo( Str, MODE_ASK); // Правильный вариант
        
      Res = MarketInfo( Symb, MODE_LOTSIZE) * MarketInfo( Symb, MODE_TICKSIZE) / PriceExchage;
    }
    else
    {
      Str = ProfitCurrency + BaseCurrency + SymbolPrefix;

      if ( Average)
        PriceExchage = (MarketInfo( Str, MODE_BID) + MarketInfo( Str, MODE_ASK)) / 2;
      else
        PriceExchage = MarketInfo( Str, MODE_BID);
        
      Res = MarketInfo( Symb, MODE_LOTSIZE) * MarketInfo( Symb, MODE_TICKSIZE) * PriceExchage;
    }
  }
  
  return( Res);
}

void start()
{  
  double TickValue, TickValue1, TickValue2;
  
  TickValue = MarketInfo(Symbol(), MODE_TICKVALUE);
  TickValue1 = GetTickValue(Symbol(), TRUE);
  TickValue2 = GetTickValue(Symbol(), FALSE);
  
  Print("MT4 TickValue = " + DoubleToStr( TickValue, 5));
  Print("Average TickValue = " + DoubleToStr( TickValue1, 5));
  Print("Real TickValue = " + DoubleToStr( TickValue2, 5));
  
  return;
}

Tenías razón, MODE_TICKVALUE no cuenta correctamente en algunos casos: todo cuenta sólo a través del precio BID, incluso cuando debería contar a través del precio ASK.

 
getch >>:

Умею только автоматом:

Вы оказались правы, MODE_TICKVALUE считается в некоторых случаях некорректно: все считается только через BID-цену, даже когда надо считать через ASK-цену.

¿Cuál es el margen de error?

 
kombat >>:

А насколь % эта погрешность?

Suficiente para que los auditores se hagan preguntas.

 
getch >>:

Достаточная, чтобы у аудиторов возникли вопросы.

En el volumen de garrapatas...

Creía que sólo les interesaba el precio de apertura y el de cierre...

 
kombat >>:

Нуно не одна из, а та что валюта котировки, JPY в данном случае.

Ver -


USDJPY


probador en el período


2008/10/01 -> 2009/01/01


Saltar a 2008/10/01


====


2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_FREEZELEVEL=0.00000000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_MARGINREQUIRED=1000.00000000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_MARGINHEDGED=0.00000000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_MARGINMAINTENANCE=0.00000000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_MARGININIT=0.00000000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_MARGINCALCMODE=0.00000000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_PROFITCALCMODE=0.00000000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_SWAPTYPE=0.00000000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_MAXLOT=1000.00000000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_LOTSTEP=0.10000000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_MINLOT=0.10000000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_TRADEALLOWED=0.00000000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_EXPIRATION=0.00000000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_STARTING=0.00000000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_SWAPSHORT=-0.50000000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_SWAPLONG=-0.50000000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_TICKSIZE=0.00100000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_TICKVALUE=1.09488252

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_LOTSIZE=100000.00000000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_STOPLEVEL=20.00000000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_SPREAD=19.00000000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_DIGITS=3.00000000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_POINT=0.00100000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_ASK=111.70900000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_BID=111.69000000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_TIME=1199260860.00000000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_HIGH=0.00000000

2010.01.13 12:14:42 2008.01.02 08:01 OTestExpert3 USDJPY,M1: MODE_LOW=0.00000000


=============


string s=Symbol();
   
   int Code2[]={  MODE_LOW,
                  MODE_HIGH,
                  MODE_TIME,
                  MODE_BID,
                  MODE_ASK,
                  MODE_POINT,
                  MODE_DIGITS,
                  MODE_SPREAD,
                  MODE_STOPLEVEL,
                  MODE_LOTSIZE,
                  MODE_TICKVALUE,
                  MODE_TICKSIZE,
                  MODE_SWAPLONG,
                  MODE_SWAPSHORT,
                  MODE_STARTING,
                  MODE_EXPIRATION,
                  MODE_TRADEALLOWED,
                  MODE_MINLOT,
                  MODE_LOTSTEP,
                  MODE_MAXLOT,
                  MODE_SWAPTYPE,
                  MODE_PROFITCALCMODE,
                  MODE_MARGINCALCMODE,
                  MODE_MARGININIT,
                  MODE_MARGINMAINTENANCE,
                  MODE_MARGINHEDGED,
                  MODE_MARGINREQUIRED,
                  MODE_FREEZELEVEL
               };
   string CodeName2[]={"MODE_LOW",
                        "MODE_HIGH",
                        "MODE_TIME",
                        "MODE_BID",
                        "MODE_ASK",
                        "MODE_POINT",
                        "MODE_DIGITS",
                        "MODE_SPREAD",
                        "MODE_STOPLEVEL",
                        "MODE_LOTSIZE",
                        "MODE_TICKVALUE",
                        "MODE_TICKSIZE",
                        "MODE_SWAPLONG",
                        "MODE_SWAPSHORT",
                        "MODE_STARTING",
                        "MODE_EXPIRATION",
                        "MODE_TRADEALLOWED",
                        "MODE_MINLOT",
                        "MODE_LOTSTEP",
                        "MODE_MAXLOT",
                        "MODE_SWAPTYPE",
                        "MODE_PROFITCALCMODE",
                        "MODE_MARGINCALCMODE",
                        "MODE_MARGININIT",
                        "MODE_MARGINMAINTENANCE",
                        "MODE_MARGINHEDGED",
                        "MODE_MARGINREQUIRED",
                        "MODE_FREEZELEVEL"
                        };
   
   for ( i=0; i< ArraySize( Code2); i++){
      
      double mre  = MarketInfo ( s, Code2[ i]);
      int    err = GetLastError();
         
      Print ( CodeName2[ i],"=", DoubleToStr( mre,9));
 
      
      if ( ERR_NO_ERROR != err )
          Print ( "error(", err,")", "--", ErrorDescription( err)  );
 
SProgrammer >>:

MODE_TICKVALUE для EURUSD по маркетинфо = 1.0000000 :), а не 10.


1 - para 5 dígitos

10 - para 4

 
kombat >>:

По тик волуму???

Мне казалось что их интересует лишь цена окрытия цена закрытия...

No sé cómo calculan los desarrolladores el beneficio. Si lo hacen a través de MODE_TICKVALUE, la ganancia en algunos casos se cuenta incorrectamente - más de lo que realmente es. Por ejemplo, en GBPJPY.

Pero, de hecho, MetaTrader4 calcula los beneficios de forma incorrecta, ya que traduce inmediatamente la moneda de los beneficios a la moneda base de la cuenta. La forma correcta de hacerlo es en el momento del valor.

En el interbancario, la equidad cambia constantemente si usted ha abierto y cerrado una posición con una moneda de ganancia distinta a la de la cuenta (por ejemplo, en una cuenta de USD usted hizo una operación de USDJPY). Y sólo en el momento de la valoración (puede que esté utilizando el término incorrectamente) se fija el Patrimonio (utilizando el ejemplo - el beneficio en JPY se traduce al tipo de cambio actual de USDJPY a USD).

Lo más interesante es cómo se cuenta el beneficio, por ejemplo, para AUDNZD en la cuenta de EUR, cuando la tasa de EURNZD no está disponible en el corredor...