XAUUSD lote de tamanho errado em conta denominada em GBP? - página 5

 
DomGilberto:
Obrigado :) - Vou dar uma olhada agora!

Também, na sua opinião, a FXCM está errada com a forma como eu estou vendo o valor do Tick? Eles são inflexíveis em afirmar que é perfeitamente normal? Você não saberia por que eles estão estragando tudo, não é?
Eu não sei por que eles estão fazendo o que estão fazendo . . . se você quer algum peso por trás de seus argumentos instale alguns de seus concorrentes e veja como eles têm o Tick Value definido, então diga a eles o que seus concorrentes estão fazendo . . . e pergunte se eles ainda se sentem "normais" . .
 
Oh, acredite, eu verifiquei cerca de 5-6 corretores diferentes! Estou tão irritado porque já comecei a negociar com eles. De todos os corretores, eu não teria pensado que FXCM faria tal coisa:(

Só por curiosidade - eu li o link anterior que você anexou; não é mais fácil fazer assim? - As impressões também estão lá. Acabei de deixar isso na minha conta ao vivo com a FXCM. Isso me dá um TickValue bastante preciso agora baseado no valor do tick GBPUSD e simplesmente * 0,10 ?

A única coisa que eu não sei é como criar uma troca, onde, como você disse, se o corretor tem os detalhes corretos, usá-los???? (capaz de me apontar na direção certa?)
   double risk_amount = AccountBalance( )* 2.00 / 100;
   double Lot_Step = MarketInfo(Symbol(), MODE_LOTSTEP);
   double ts = MarketInfo(Symbol(), MODE_TICKSIZE);
   double tv = MarketInfo(Symbol(), MODE_TICKVALUE);
   double minlot = MarketInfo(Symbol(), MODE_MINLOT);
   
   double GBPUSD = MarketInfo( "GBPUSD", MODE_TICKVALUE);
   
      double CustomTickValue = 0.10 * GBPUSD;
         Print(" Custom Tick Value is: ", 0.10, " * ", GBPUSD, " = ", CustomTickValue);

2013.11.12 11:32:33     Tick Value test XAUUSD,H1:  Custom Tick Value is: 0.1 * 0.6296 = 0.063

            
      double loss_for_1_lot = 25.25 / ( 0.10 * GBPUSD ) * ts ;
         Print(" loss_for_1_lot formula: ", 25.25, " / ", ts, " * (", CustomTickValue,") = ", loss_for_1_lot );

2013.11.12 11:32:33     Tick Value test XAUUSD,H1:  loss_for_1_lot formula: 25.25 / 0.01 * (0.063) = 4.0106

      
      double LotSize_Buy = MathFloor( risk_amount / loss_for_1_lot/ Lot_Step) * Lot_Step ;
         Print(" LotSize_Buy: ( ", risk_amount, " / ", loss_for_1_lot, " / ", Lot_Step, " ) * ", Lot_Step, " = ", LotSize_Buy); 

2013.11.12 11:32:33     Tick Value test XAUUSD,H1:  LotSize_Buy: ( 76.0598 / 4.0106 / 1 ) * 1 = 18
 
DomGilberto:
Acredite, já verifiquei cerca de 5-6 corretores diferentes! Estou tão aborrecido porque já comecei a negociar com eles. De todos os corretores, eu não teria pensado que FXCM faria tal coisa :(

Só por curiosidade - li o link anterior que você anexou; não é mais fácil fazer assim?

Isso pode/virá a funcionar ( eu não olhei com detalhes suficientes ) onde o símbolo é XXXUSD e sua moeda de conta é GBP, você não prefere uma função que funcione para um símbolo como XXXYYY e uma moeda de conta do ZZZ ? então você está acabado e não precisa se preocupar novamente com este assunto . .

A única coisa que eu não sei é como criar uma troca, onde, como você disse, se o corretor tem os detalhes corretos, usá-los???? (capaz de me apontar na direção certa?)
Você poderia simplesmente fazer o cálculo e comparar o valor calculado com o valor do MarketInfo() e se o diferencial for superior a 10%, 20% . . o que quer que você pense ser um erro suficientemente grande, você usa o valor calculado. Você só precisa ter certeza de que os valores que você está usando em seu cálculo estão corretos, para isso, se você obtiver o Valor do Tick para um símbolo cuja moeda base (EURGBP) é a mesma que a moeda de sua conta (GBP) será 1,0 ( Corretor de 5 dígitos ), então trabalhe de volta a partir daí para o símbolo para o qual você precisa encontrar o Valor do Tick.
 
Bom grito! Ok, então eu tive uma brincadeira - se você tiver um minuto, você se importaria de dar uma olhada nisto para ver o que você pensa? Agradeço não ter feito isto muito robusto - estou apenas procurando uma correção temporária (que sei que a palavra temporária é uma palavra perigosa!) que permanecerá robusta especificamente com o FXCM no ínterim... Esta abaixo é especificamente para o XAGUSD!(desculpe-me por ter precisado atualizá-la, pois a afixei errada!)

minLot é sempre 50,00 para a prata ou 1,00 para o ouro.
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
 

  
   double ts = MarketInfo(Symbol(), MODE_TICKSIZE);
   double tv = MarketInfo(Symbol(), MODE_TICKVALUE);
   
   double GBPUSD_BID = MarketInfo( "GBPUSD", MODE_BID);
   double CustomTickValue;
   
   double EqualityTickValue = (( 0.10 / GBPUSD_BID * minLot ) - tv ) * 1000;
      Print(" EqualityTickValue formula is: ( ", 10, " / ", GBPUSD_BID, " * ", 50, " ) - ", tv, ") * ", 1000, " = ", EqualityTickValue);

2013.11.12 14:40:08     Tick Value test XAUUSD,H1:  EqualityTickValue formula is: ( 10 / 1.5911 * 50 ) - 0.01) * 1000 = 3132.401


      
   
   if( EqualityTickValue > 20.00 ) 
     {
      CustomTickValue = (0.10 / GBPUSD_BID  * minLot );
      Print(" CustomTickValue is custom: ", 10, " / ", GBPUSD_BID, " * ", 50.00, " = ", CustomTickValue); 

2013.11.12 14:40:08     Tick Value test XAUUSD,H1:  CustomTickValue is custom: 10 / 1.5911 * 50 = 3.1424

     }
   if( EqualityTickValue < 20.00)
     { 
      CustomTickValue = tv;
      Print(" CustomTickValue is MarketInfo: ", tv);



     } 
     
//----
   return(0);
  }
 
DomGilberto:
Bom grito! Ok, então eu tive uma brincadeira - se você tiver um minuto, você se importaria de dar uma olhada nisto para ver o que você pensa? Agradeço não ter tornado isto muito robusto - estou apenas procurando uma correção temporária (que sei que a palavra temporária é uma palavra perigosa!) que permanecerá robusta especificamente com o FXCM no ínterim... Esta abaixo é especificamente para o XAGUSD!(desculpe-me por ter precisado atualizá-la, pois a afixei errada!)

minLot é sempre 50,00 para a prata ou 1,00 para o ouro.


Aqui está algo mais genérico...

Ela pode ser expandida para cobrir outros símbolos por diferentes corretores.

As principais entradas a serem observadas aqui são BidUSD e AskUSD. BidUSD é o preço em dólar da moeda da margem, então digamos que seu símbolo TradeSymbol era GBPJPY, então o BidUSD seria o preço de GBPUSD. Da mesma forma, o AskUSD seria USDJPY. Se qualquer uma das moedas de margem ou de lucro for USD, por exemplo, qualquer uma das principais, então o seu BidUSD===AskUSD===o preço atual do símbolo TradeSymbol.

O que é retornado por esta função é o ganho/perda por manter um lote (1,0) do TradeSymbol através de um PriceDelta especificado (um dos inputs).

//+------------------------------------------------------------------+
//|                                                       Profit.mqh |
//|                                                              ssn |
//+------------------------------------------------------------------+
#property copyright "ssn"

//#property version   "3.31"

double Profit(string TradeSymbol,double PriceDelta,double BidUSD,double AskUSD)
   {
      double _profit=0.0;
      
      if(StringFind(TradeSymbol,"TNOTE",2)>=0||
         StringFind(TradeSymbol,"aTND",0)>=2){
         _profit+=MarketInfo(TradeSymbol,MODE_LOTSIZE)*BidUSD;
         _profit*=PriceDelta;}
      
      else if(StringFind(TradeSymbol,"US500",0)>=0||
               StringFind(TradeSymbol,"a500",0)>=0||
               StringFind(TradeSymbol,"SPY",0)>=0){
         _profit+=MarketInfo(TradeSymbol,MODE_LOTSIZE)*BidUSD;
         _profit*=PriceDelta;}
      
      else if(StringFind(TradeSymbol,"XAG",0)>=0||StringFind(TradeSymbol,"XAU",0)>=0){
         _profit+=MarketInfo(TradeSymbol,MODE_LOTSIZE)*BidUSD;
         _profit*=PriceDelta; }
      
      else if(StringFind(TradeSymbol,"EUR",0)>=0||
         StringFind(TradeSymbol,"GBP",0)>=0||
         StringFind(TradeSymbol,"AUD",0)>=0||
         StringFind(TradeSymbol,"NZD",0)>=0){
         _profit+=MarketInfo(TradeSymbol,MODE_LOTSIZE)*BidUSD;
         if(StringFind(TradeSymbol,"USD",0)>=0){ 
            _profit*=PriceDelta; }
         else if(StringFind(TradeSymbol,"USD",0)<0){
            if(StringFind(TradeSymbol,"GBP",0)>=0||
               StringFind(TradeSymbol,"AUD",0)>=0||
               StringFind(TradeSymbol,"NZD",0)>=0){
               _profit*=PriceDelta*AskUSD; }
            else if(StringFind(TradeSymbol,"CAD",0)>=0||
                  StringFind(TradeSymbol,"CHF",0)>=0||
                  StringFind(TradeSymbol,"JPY",0)>=0){
               _profit*=PriceDelta;
               if(AskUSD!=0.0) { _profit/=AskUSD; }
               else if(AskUSD==0.0) {
                  Print(" Ask's USD price is zero! ensure it's provided. ");
                  return(0.0); }}}}
      
      else if(StringFind(TradeSymbol,"USD",0)>=0){
         _profit = MarketInfo(TradeSymbol,MODE_LOTSIZE);
         if(StringFind(TradeSymbol,"CAD",0)>=0||
            StringFind(TradeSymbol,"CHF",0)>=0||
            StringFind(TradeSymbol,"JPY",0)>=0){
            _profit*=PriceDelta;
            if(AskUSD!=0.0) { _profit/=AskUSD; }
            else if(AskUSD==0.0) {
               Print(" Ask's USD price is zero! ensure it's provided. ");
               return(0.0); }}}
               
      else if( StringFind(TradeSymbol,"CAD",0)>=0||
               StringFind(TradeSymbol,"CHF",0)>=0){
         if(BidUSD!=0.0) { _profit = MarketInfo(TradeSymbol,MODE_LOTSIZE)/BidUSD; }
         else if(BidUSD==0.0) {
            Print(" Bid's USD price is zero! ensure it's provided. ");
            return(0.0); }
         _profit*=PriceDelta;
         if(AskUSD!=0.0) { _profit/=AskUSD; }
         else if(AskUSD==0.0) {
            Print(" Ask's USD price is zero! ensure it's provided. ");
            return(0.0);  }}
             
      return(_profit);
   }
 

Obrigado por seu companheiro de posto - Não tenho certeza absoluta do que estou tirando disso, no entanto - terá um olhar mais atento amanhã...

Razão: