XAUUSD在以英镑计价的账户上的手数错误? - 页 5

 
DomGilberto:
谢谢你 :)- 我现在就去看看!

另外,在您看来,FXCM对我看到的Tick Value的看法是否有误?他们坚持说这是非常正常的?你不知道为什么他们会把它搞砸,是吗?
我不知道他们为什么要这么做 ......如果你想在你的论点后面加上一些砝码,安装一些他们的竞争对手,看看他们是如何设置Tick Value的,然后告诉他们他们的竞争对手在做什么 ......并询问他们是否仍然觉得 "正常" ......
 
哦,相信我,我已经检查了 大约5-6个不同的经纪商!我很恼火,因为我已经开始在他们那里交易了。我很恼火,因为我已经开始和他们交易了。在所有的经纪商中,我不会想到FXCM会做出这样的错误 :(

只是出于好奇--我看了你之前附上的链接;这样做不是更容易吗?- 印刷品也在那里。我刚刚把它放到我在FXCM的真实账户上...。它给了我一个相当准确的TickValue,基于GBPUSD的tick值和简单*0.10?

我唯一不知道的是如何创建一个开关,正如你所说的,如果经纪人有正确的细节,就用他们。(能给我指出正确的方向吗?)
   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:
哦,相信我,我已经检查了大约5-6个不同的经纪商!我很恼火,因为我不知道该怎么办。我很恼火,因为我已经开始和他们交易了。在所有的经纪商中,我不会想到FXCM会做出这样的错事 :(

只是出于好奇--我看了你之前附上的链接;这样做不是更容易吗?

这可能/将会起作用(我没有看得足够详细),如果符号是XXXUSD,而你的账户货币是GBP,难道你不希望有一个功能,对一个符号如XXXXYY和账户货币 ZZZ起作用?

我唯一不知道的是如何创建一个开关,如你所说,如果经纪人有正确的细节,就使用它们。(能否给我指出正确的方向?)
你可以简单地进行计算,并将计算值与MarketInfo()的值进行比较,如果两者相差超过10%,20%......不管你认为是多大的差距。......不管你认为有多大的误差,你就使用计算值。 你只需要确定你在计算中使用的数值是正确的,为此,如果你得到一个基础货币(EURGBP)与你的账户货币(GBP)相同的符号的Tick Value,它将是1.0(5位数的经纪人),然后再从这个符号中找出你需要的Tick Value。
 
喊得好!好吧,我已经玩了一圈--如果你有时间,你能不能看一下这个,看看你的想法? 我知道我没有把它做得非常强大--我只是在寻找一个临时的解决方案(我知道临时这个词是一个危险的词!),在这期间,特别是在FXCM中保持强大......下面这个是专门针对XAGUSD的!(对不起,我需要更新它,因为我发布了错误的一个!)

白银的最小手数始终是50.00,黄金是1.00。
//+------------------------------------------------------------------+
//| 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:
喊得好!好了,我已经玩了一圈--如果你有时间,你能不能看一下这个,看看你怎么想? 我知道我没有把它做得非常强大--我只是在寻找一个临时的修复方法(我知道临时这个词很危险!),在这期间,特别是在FXCM中保持强大。下面这个是专门针对XAGUSD的!(对不起,我需要更新它,因为我发布了错误的一个!)

白银的最小手数始终是50.00,黄金是1.00。


下面是一些更通用的东西...

它可以扩展到不同经纪商的其他符号。

这里需要注意的关键输入是 BidUSD 和 AskUSD。BidUSD是保证金货币 的美元价格,所以假设你的交易符号是GBPJPY,那么BidUSD将是GBPUSD的价格。同样,AskUSD将是USDJPY。如果任何一种保证金货币或盈利货币是美元,例如任何一种主要货币,那么您的BidUSD==AskUSD==贸易符号的当前价格。

这个函数返回的是持有一手(1.0)TradeSymbol的收益/损失,通过指定的PriceDelta(输入之一)。

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

谢谢你的帖子,伙计--但我并不完全确定我从中得到了什么--明天会仔细看看。