Цена за трубопровод - страница 10

 

Самый простой способ - использовать брокера спредбеттинга на MT4, который делает расчеты за вас. Цена объема в вашем торговом билете указывается не в лотах, а в фунтах и пенсах, например, £4.20 за пункт (или в любой другой валюте, которую вы хотите) Это делает точный размер сделки очень простым.

Я использую http://www.gkfx.co.uk/spreadbetting-on-MetaTrader4

 
LEHayes:

Я не уверен, на правильном ли я пути, но вот что я собрал на данный момент.

На другом веб-сайте расчет был примерно таким:

(.0001/{текущая цена пары})*{размер контракта, то есть 100,000; 10,000 и т.д.} = {некоторое значение} * {цена доллара} = цена за пипс.

Объяснение из этого извлечения:

Формула для расчета стоимости пункта на Форекс состоит в том, чтобы взять один пункт и разделить его на цену валютной пары, а затем умножить на единицу, которая равна 10000. Затем вам нужно перевести его в доллары США, поэтому вы умножаете его на текущую цену. Например, на примере USDCAD

(.0001/1.2148) X 10000 = .8232 X 1.2148 = $1.00.

На сайте вы всегда увидите, что для любой валютной пары стоимость пункта всегда составляет $1.00 за 10000 единиц валюты. Вы можете подумать, что это очень низкое значение. Однако вам необходимо учесть, что валюта торгуется лотами по $100,000.00, что составляет $10.00 за пункт. Если вы покупаете один лот за $10.00 и валюта увеличивается на 3 пункта, вы получаете прибыль в размере $30.00.


Спасибо, ребята, я позаимствовал некоторый код и вот мой вклад

double GetPPP( string symbol = "", double lots = 0.00 ){
   string sym = Symbol();
   if( symbol != "" ) sym = symbol ;
   double size = 1.00;
   if( lots > 0 ) size = lots ;
   string first = StringSubstr( symbol, 0, 3 );
   string second = StringSubstr( symbol, 3, 3 );
   string currency = AccountCurrency();
   if( symbol == "AUDCAD" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "AUDCHF" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "AUDJPY" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) )  * 100 );
   } else if( symbol == "AUDUSD" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) ); 
   } else if( symbol == "AUDNZD" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "CADCHF" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints / AvgPrice( StringConcatenate( currency, first ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "CADJPY" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints / AvgPrice( StringConcatenate( currency, first ) ) / AvgPrice( StringConcatenate( first, second ) )  * 100 );
   } else if( symbol == "CHFJPY" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints / AvgPrice( StringConcatenate( currency, first ) ) / AvgPrice( StringConcatenate( first, second ) )  * 100 );
   } else if( symbol == "EURAUD" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "EURCAD" ){
     return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "EURCHF" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "EURGBP" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   }  else if( symbol == "EURJPY" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) )  * 100 );
   } else if( symbol == "EURNZD" ){
     return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "EURusd" ){
     return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "GBPAUD" ){
     return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "GBPCAD" ){
     return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "GBPCHF" ){
     return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "GBPJPY" ){
     return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) * 100 );
   } else if( symbol == "GBPNZD" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "GBPUSD" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "NZDCAD" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "NZDCHF" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "NZDJPY" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) * 100  );
   } else if( symbol == "NZDUSD" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   }  else if( symbol == "USDCAD" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * 1 / AvgPrice( StringConcatenate( first, second  ) ) );
   }  else if( symbol == "USDCHF" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * 1 / AvgPrice( StringConcatenate( first, second  ) ) );
   }  else if( symbol == "USDJPY" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * PipPoints * 1 / AvgPrice( StringConcatenate( first, second  ) ) * 100 ) ;
   } else {
      Print("Symbol ",symbol," is not supported.");
   }
}
 

Извините, ребята, вот обновление, удалилPipPoints и исправил символ, и не понял, что это зависит от одного из моих других возрастов использования:

double PPP =GetPPP(Symbol());

double PPP =GetPPP(Symbol() , 0.5);

double PPP =GetPPP("NZDJPY");

Надеюсь, это поможет и спасибо за помощь.

double AvgPrice( symbol ){
   double bid, ask;
   ask = NormalizeDouble( MarketInfo( sym, MODE_ASK ), digits );
   bid = NormalizeDouble( MarketInfo( sym, MODE_BID ), digits ); 
   return ( ( ask + bid ) / 2 );
}
double GetPPP( string symbol, double lots = 0.00 ){
   double size = 1.00;
   if( lots > 0 ) size = lots ;
   string first = StringSubstr( symbol, 0, 3 );
   string second = StringSubstr( symbol, 3, 3 );
   string currency = AccountCurrency();
   if( symbol == "AUDCAD" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.0001 * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "AUDCHF" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.0001 * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "AUDJPY" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.01 * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "AUDUSD" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.0001 * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) ); 
   } else if( symbol == "AUDNZD" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.0001 * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "CADCHF" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.0001 / AvgPrice( StringConcatenate( currency, first ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "CADJPY" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.01 / AvgPrice( StringConcatenate( currency, first ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "CHFJPY" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.01 / AvgPrice( StringConcatenate( currency, first ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "EURAUD" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.0001 * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "EURCAD" ){
     return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.0001 * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "EURCHF" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.0001 * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "EURGBP" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.0001 * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   }  else if( symbol == "EURJPY" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.01 * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "EURNZD" ){
     return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.0001 * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "EURusd" ){
     return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.0001 * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "GBPAUD" ){
     return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.0001 * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "GBPCAD" ){
     return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.0001 * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "GBPCHF" ){
     return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.0001 * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "GBPJPY" ){
     return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.01 * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "GBPNZD" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.0001 * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "GBPUSD" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.0001 * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "NZDCAD" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.0001 * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "NZDCHF" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.0001 * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "NZDJPY" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.01 * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   } else if( symbol == "NZDUSD" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.0001 * AvgPrice( StringConcatenate( first, currency ) ) / AvgPrice( StringConcatenate( first, second ) ) );
   }  else if( symbol == "USDCAD" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.0001 * 1 / AvgPrice( StringConcatenate( first, second  ) ) );
   }  else if( symbol == "USDCHF" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.0001 * 1 / AvgPrice( StringConcatenate( first, second  ) ) );
   }  else if( symbol == "USDJPY" ){
      return ( size * MarketInfo( symbol, MODE_LOTSIZE ) * 0.01 * 1 / AvgPrice( StringConcatenate( first, second  ) ) ) ;
   } else {
      Print("Symbol ",symbol," is not supported.");
   }
}
 

извините, что поднимаю тему с 2013 года,

Но кто-нибудь сделал или нашел инди, который я могу ввести значение, чтобы платить мне за пункт, и он скажет мне размер лота на валютную пару, как спред ставки счет, но для стандартных счетов Форекс?

 
Никогда не рискуйте более чем небольшим процентом от вашего счета, конечно, менее 2% на сделку, 6% в целом.
  1. В коде (MT4): Риск зависит от вашего начального стоп-лосса, размера лота и стоимости пары. Он не зависит от маржи и кредитного плеча.
    1. Вы размещаете стоп там, где он должен быть - там, где причина для торговли больше не актуальна. Например, при торговле на отскоке от поддержки стоп опускается ниже поддержки.
    2. AccountBalance * percent/100 = RISK = OrderLots * (|OrderOpenPrice - OrderStopLoss| * DeltaPerLot + CommissionPerLot) (Примечание OOP-OSL включает спред, а DeltaPerLot обычно составляет около $10/pip, но он учитывает обменные курсы пары по отношению к валюте вашего счета).
    3. НЕ используйте TickValue сам по себе - DeltaPerLot и проверьте, возвращает ли MODE_TICKVALUE значение в валюте вашего депозита, как обещано в документации, или возвращает ли он значение в базовой валюте инструмента.
      MODE_TICKVALUE не надежен на не валютных инструментах у многих брокеров - Форум по программированию MQL4 2017.10.10
      Есть ли универсальное решение для Tick value? -Валютные пары - Общие вопросы - Форум по программированию MQL5 2018.02.11
      Расчет стоимости лота зашкаливает в 100 раз - Форум по программированию MQL5 2019.07.19
    4. Вы должны правильно нормализовать лоты и проверить их на соответствие min и max.
    5. Вы также должны проверить FreeMargin, чтобы избежать стоп-аута.

    Большинство пар стоят около $10 за PIP. Риск в $5 с (очень маленьким) SL в 5 PIP составляет $5/$10/5 или 0,1 лота максимум.

  2. Используйте GUI/Trade Assistant EA, как у меня (для MT4): индикатор 'Money Manager Graphic Tool' от 'takycard' - Управление рисками - Статьи, комментарии библиотеки - Форум по программированию MQL5 - Страница 6 #55
 
//+------------------------------------------------------------------+
//|                                                      getInfo.mq4 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Open Source"
#property link      
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {


   double LotSize= 1;
   double point= Point;
   if((Digits==3) || (Digits==5))
     {
      point*=10;
     }
   string DepositCurrency=AccountInfoString(ACCOUNT_CURRENCY);  
   double PipValue=(((MarketInfo(Symbol(),MODE_TICKVALUE)*point)/MarketInfo(Symbol(),MODE_TICKSIZE))*LotSize);
    
   
   
   MessageBox("DEPOSIT CURRENCY"+ DepositCurrency ,"ToolBox");
   MessageBox("VALUE OF ONE PIP (1 LOT)="+ PipValue ,"ToolBox");
   
   
  }
//+------------------------------------------------------------------+