← К каталогу
Исходный код · ID 1157

No Nonsense ATR

no_nonsense_atr.mq4
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

No Nonsense ATR — пользовательский индикатор для MetaTrader 4, предназначенный для трейдеров, работающих по методике NNFX. Индикатор рассчитывает значения ATR для двух независимых наборов параметров: для тейк-профита и для стоп-лосса. Полученные значения отображаются в виде текста в углу графика, а также могут использоваться для построения линий TP/SL по клику мыши.

Индикатор поддерживает режим фильтрации ATR: при включении опции FILTER_ATR значения ATR сглаживаются с использованием стандартного отклонения и скользящего среднего, что позволяет отсекать аномальные всплески волатильности. Для этого задаются множитель стандартного отклонения и размер выборки.

Дополнительно индикатор рассчитывает рекомендуемый торговый объём на основе заданного риска на сделку и текущего значения стоп-лосса. Объём может отображаться в углу графика, а также использоваться для построения линий на графике. Пользователь может настроить отображение текста, его расположение, цвет, размер, фон, а также поведение линий TP/SL при клике мышью.

Индикатор не является торговым советником и не выполняет торговых операций. Все расчёты производятся на основе исторических данных и текущих рыночных котировок.

Настройки программы

НастройкаОписание
TP ATR PERIOD (ATR_TP_PERIOD) Период ATR для TP — Период ATR, используемый для расчёта тейк-профита.
TP MULTIPLIER (ATR_TP_MULTIPLIER) Множитель ATR для TP — Множитель, применяемый к значению ATR для расчёта тейк-профита.
SL ATR PERIOD (ATR_SL_PERIOD) Период ATR для SL — Период ATR, используемый для расчёта стоп-лосса.
SL MULTIPLIER (ATR_SL_MULTIPLIER) Множитель ATR для SL — Множитель, применяемый к значению ATR для расчёта стоп-лосса.
ATR SHIFT (ATR_SHIFT) Сдвиг ATR — Сдвиг в барах для расчёта значений ATR относительно текущего бара.
N? OF DIGITS TO THE RIGHT OF a DECIMAL POINT (ATR_digits) Знаков после запятой — Количество знаков после запятой при отображении значений ATR.
=================================== (desc0) Разделитель — Разделитель для группировки настроек.
FILTER ATR? (FILTER_ATR) Фильтр ATR — Включает фильтрацию значений ATR на основе стандартного отклонения и скользящего среднего.
STANDARD DEVIATION MULTIPLIER (SD_multi) Множитель стандартного отклонения — Множитель стандартного отклонения, применяемый при фильтрации ATR.
SAMPLE SIZE (sample_size) Размер выборки — Размер выборки для расчёта стандартного отклонения при фильтрации ATR.
=================================== (desc1) Разделитель — Разделитель для группировки настроек.
SHOW CORNER TEXT? (SHOW_CORNER_TEXT) Показывать текст в углу — Отображать текст с значениями ATR в углу графика.
TEXT CORNER 0-UL 1-UR 2-LL 3-LR (text_corner) Угол текста — Угол графика для отображения текста: 0 — верхний левый, 1 — верхний правый, 2 — нижний левый, 3 — нижний правый.
FONT SIZE (text_size) Размер шрифта — Размер шрифта для текста в углу графика.
TEXT COLOR (text_color) Цвет текста — Цвет основного текста в углу графика.
SUBTEXT COLOR (subtext_color) Цвет подтекста — Цвет дополнительного текста в углу графика.
SHOW CORNER TEXT BACKGROUND? (text_background) Фон текста — Отображать фон для текста в углу графика.
BACKGROUND COLOR (solid_color) Цвет фона — Цвет фона для текста в углу графика.
=================================== (desc2) Разделитель — Разделитель для группировки настроек.
MOUSE CLICK TO HOLD TEXT? (CLICK_TO_PAUSE) Клик для паузы — При включении позволяет фиксировать текст в углу графика по клику мыши.
SHOW SELL/BUY LINES AT THE SAME TIME? (SHOW_SB_LINES) Показывать линии покупки/продажи — Отображать линии для покупки и продажи одновременно.
SHOW TP/SL LINES ON CLICK? (SHOW_LINES_ON_CLICK) Показывать линии по клику — Отображать линии TP/SL по клику мыши.
SHOW TP/SL LINES UNTIL PRICE? (LINES_UNTIL_PRICE) Линии до цены — Продлевать линии TP/SL до момента достижения ценой указанного уровня.
SHOW PRICE OF TP/SL LINES? (LINES_PRICE) Показывать цену линий — Отображать цену на линиях TP/SL.
TP LINE SIZE (tp_line_size) Толщина линии TP — Толщина линий тейк-профита.
TP LINE COLOR (tp_line_color) Цвет линии TP — Цвет линий тейк-профита.
SL LINE SIZE (sl_line_size) Толщина линии SL — Толщина линий стоп-лосса.
SL LINE COLOR (sl_line_color) Цвет линии SL — Цвет линий стоп-лосса.
=================================== (desc3) Разделитель — Разделитель для группировки настроек.
SHOW TRADING VOLUME (TRADING_VOLUME) Показывать торговый объём — Режим отображения торгового объёма: только на последней свече, всегда или никогда.
RISK PER TRADE% (RISK) Риск на сделку (%) — Риск на одну сделку в процентах, используемый для расчёта торгового объёма.
CURRENCY PREFIX (IF ANY) (CURRENCY_PREFIX) Префикс валюты — Префикс валютной пары, используемый при расчёте торгового объёма.
CURRENCY SUFFIX (IF ANY) (CURRENCY_SUFFIX) Суффикс валюты — Суффикс валютной пары, используемый при расчёте торгового объёма.
TRADING VOLUME RESOLUTION (TRADING_VOLUME_digits) Разрешение торгового объёма — Разрешение (количество знаков) для отображения торгового объёма.
=================================== (desc4) Разделитель — Разделитель для группировки настроек.
LIVE MODE (LIVE_MODE) Режим реального времени — Режим реального времени, при котором значения обновляются без фиксации.
LOOKBACK CANDLES (0-MAXIMUM) (n_of_history_bars) Количество свечей истории — Количество исторических свечей для расчёта и отображения индикатора. 0 — использовать максимум доступных свечей.
Получить полный код

Поиск по коду файла

#property strict
#property description "The ATR Indicator for the NNFX Traders"
#property description " "
#property description "This software is Open Source. Licence: GNU General Public License v3.0"
#property description "Instructions, documentation and source code at:   "
#property description " "
#property description "Disclaimer:  By using the No Nonsense ATR indicator you agree that the programer will not be held liable for any losses that may be incured, or any faults or bugs that may be encountered whilst using the No Nonsense ATR indicator."
#property description "No warranties are given!"

input int        ATR_TP_PERIOD        = 14;         // TP ATR PERIOD       
input double     ATR_TP_MULTIPLIER    = 1;          // TP MULTIPLIER            
input int        ATR_SL_PERIOD        = 14;         // SL ATR PERIOD  
input double     ATR_SL_MULTIPLIER    = 1.5;        // SL MULTIPLIER 
input char       ATR_SHIFT            = 0;          // ATR SHIFT
input int        ATR_digits           = 0;          // N? OF DIGITS TO THE RIGHT OF a DECIMAL POINT
extern string     desc0               = "==========================";  //===================================
input bool       FILTER_ATR           = False;      // FILTER ATR?
input double     SD_multi             = 3;          // STANDARD DEVIATION MULTIPLIER
input int        sample_size          = 200;        // SAMPLE SIZE
extern string     desc1               = "==========================";  //===================================
input bool       SHOW_CORNER_TEXT     = True;       // SHOW CORNER TEXT?
input char       text_corner          = 0;          // TEXT CORNER 0-UL 1-UR 2-LL 3-LR
input int        text_size            = 14;         // FONT SIZE
input color      text_color           = Gold;       // TEXT COLOR
input color      subtext_color        = Gold;       // SUBTEXT COLOR
input bool       text_background      = True;       // SHOW CORNER TEXT BACKGROUND?
input color      solid_color          = Black;      // BACKGROUND COLOR
extern string     desc2               = "==========================";  //===================================
input bool       CLICK_TO_PAUSE       = True;       // MOUSE CLICK TO HOLD TEXT?
input bool       SHOW_SB_LINES        = False;      // SHOW SELL/BUY LINES AT THE SAME TIME?
input bool       SHOW_LINES_ON_CLICK  = True;       // SHOW TP/SL LINES ON CLICK?
input bool       LINES_UNTIL_PRICE    = True;       // SHOW TP/SL LINES UNTIL PRICE?
input bool       LINES_PRICE          = True;       // SHOW PRICE OF TP/SL LINES? 
input int        tp_line_size         = 0;          // TP LINE SIZE
input color      tp_line_color        = DeepSkyBlue;// TP LINE COLOR
input int        sl_line_size         = 0;          // SL LINE SIZE
input color      sl_line_color        = Red;        // SL LINE COLOR
extern string     desc3               = "==========================";  //===================================
enum trading_volume_enum 
  {
   ONLY=0,     // ONLY ON LASTEST CANDLE
   ALWAYS=1,   // ALWAYS
   NEVER=2,    // NEVER
  };
input trading_volume_enum TRADING_VOLUME=NEVER;   // SHOW TRADING VOLUME
input double     RISK                 = 1;          // RISK PER TRADE%
enum account_base_currency 
  {
   QUOTE=0,     // COUNTER CURRENCY
   USD=1,       // USD
   EUR=2,       // EUR
   GBP=3,       // GBP
   CAD=4,       // CAD
   AUD=5,       // AUD
   NZD=6,       // NZD
   JPY=7,       // JPY
   CHF=8,       // CHF
   SGD=9,       // SGD
  };
input account_base_currency ACCOUNT_CURRENCY=QUOTE;            // ACCOUNT BASE CURRENCY
enum account_value 
  {
   BALANCE=0,     // BALANCE
   EQUITY=1,      // EQUITY
   FREE_MARGIN=2, // FREE MARGIN
   FIXED_VALUE=3, // FIXED VALUE
  };
input account_value ACCOUNT_VALUE=BALANCE;          // USE ACCOUNT
input double     ACCOUNT_FIXED_VALUE  = 0;          // ACCOUNT FIXED VALUE (IF SELECTED)
input string     CURRENCY_PREFIX      = "";         // CURRENCY PREFIX (IF ANY)
input string     CURRENCY_SUFFIX      = "";         // CURRENCY SUFFIX (IF ANY)
enum trading_volume_digits 
  {
   AUTO=0,        // AUTO
   DIG_0=1,       // 0
   DIG_1=2,       // 1
   DIG_2=3,       // 2
   DIG_3=4,       // 3
   DIG_4=5,       // 4
   DIG_5=6,       // 5
  };
input trading_volume_digits TRADING_VOLUME_digits=AUTO;         // TRADING VOLUME RESOLUTION
extern string     desc4               = "==========================";  //===================================
input bool       LIVE_MODE            = false;      // LIVE MODE
input int        n_of_history_bars    = 0;          // LOOKBACK CANDLES (0-MAXIMUM)

double NNF_SL[],NNF_TP[],NNF_TRADING_VOL[], _NO_NORMALIZE_NNF_SL[];
char user_mouseclick=0, show_live, live_mode=0, first_try=1;
int barstocursor=0, n_of_bars_show=0, n_of_bars_calc=0, barstocursor_mouseclick=0;
double SL, TP;
char SHOW_TEXT=True;

int OnInit(){
      // код доступен только после оплаты
   }

string getUninitReasonText(int reasonCode){
   string text="";
   switch(reasonCode){
      case REASON_ACCOUNT:
         text="Account was changed";break;
      case REASON_CHARTCHANGE:
         text="Symbol or timeframe was changed";break;
      case REASON_CHARTCLOSE:
         text="Chart was closed";break;
      case REASON_PARAMETERS:
         text="Input-parameter was changed";break;
      case REASON_RECOMPILE:
         text="Program "+__FILE__+" was recompiled";break;
      case REASON_REMOVE:
         text="Program "+__FILE__+" was removed from chart";break;
      case REASON_TEMPLATE:
         text="New template was applied to chart";break;
      default:text="Another reason";
     }
   return text;
}

int deinit(){
   if(SHOW_TEXT==true){ // saida nao por causa erro
      ObjectDelete("NO_NONSENSE_ATR"); // apagar objetos
      ObjectDelete("NO_NONSENSE_ATR_FIXED");
      ObjectDelete("NO_NONSENSE_ATR_RECT");

      ObjectDelete("NO_NONSENSE_ATR_ERROR");
      ObjectDelete("NO_NONSENSE_ATR_FIXED_ERROR");

      ObjectDelete("NO_NONSENSE_ATR_ORDER_LINE");

      lines_delete(0);
      lines_delete(1);
   }

   return(0);
}

void exit_program(string error_code, string text, string text2){
   if(SHOW_TEXT==true){
      ObjectDelete("NO_NONSENSE_ATR"); // apagar objetos
      ObjectDelete("NO_NONSENSE_ATR_FIXED");

      ObjectCreate("NO_NONSENSE_ATR_ERROR", OBJ_LABEL, 0, 0, 0);
      ObjectSetText("NO_NONSENSE_ATR_ERROR"," No Nonsense ATR",text_size, "Verdana", text_color);
      ObjectSetInteger(0,"NO_NONSENSE_ATR_ERROR",OBJPROP_READONLY,true);
      ObjectSetInteger(0,"NO_NONSENSE_ATR_ERROR",OBJPROP_SELECTABLE,false);
      ObjectSet("NO_NONSENSE_ATR_ERROR", OBJPROP_CORNER, text_corner);
      ObjectSet("NO_NONSENSE_ATR_ERROR", OBJPROP_XDISTANCE, 0);
      ObjectSet("NO_NONSENSE_ATR_ERROR", OBJPROP_YDISTANCE, 5+text_size);

      ObjectCreate("NO_NONSENSE_ATR_FIXED_ERROR", OBJ_LABEL, 0, 0, 0);
      ObjectSetText("NO_NONSENSE_ATR_FIXED_ERROR"," -- ERROR "+error_code+" -- Check the Experts tab!",text_size, "Verdana", subtext_color);
      ObjectSetInteger(0,"NO_NONSENSE_ATR_FIXED_ERROR",OBJPROP_READONLY,true);
      ObjectSetInteger(0,"NO_NONSENSE_ATR_FIXED_ERROR",OBJPROP_SELECTABLE,false);
      ObjectSet("NO_NONSENSE_ATR_FIXED_ERROR", OBJPROP_CORNER, text_corner);
      ObjectSet("NO_NONSENSE_ATR_FIXED_ERROR", OBJPROP_XDISTANCE, 0);
      ObjectSet("NO_NONSENSE_ATR_FIXED_ERROR", OBJPROP_YDISTANCE, 5+text_size*2+text_size/4);

      Print("");
      Print(text2);
      Print("No Nonsense ATR ERROR - "+text);

      Print("");

      ObjectDelete("NO_NONSENSE_ATR_ORDER_LINE");
      lines_delete(0);
      lines_delete(1);
      bool res=ChartIndicatorDelete(0,ChartWindowFind(),"No_Nonsense_ATR");
      if(!res){
         PrintFormat("Failed to delete indicator",GetLastError());  
         Print("Make a zero divide to exit program.");
         n_of_bars_show=0; n_of_bars_show=1/n_of_bars_show; // make a zero divide to exit program
      }
      SHOW_TEXT=FALSE;
   }
}

void lines_delete(char lines){

   if (lines==1){
   ObjectDelete("NO_NONSENSE_ATR_TP_LINE_BUY");
   ObjectDelete("NO_NONSENSE_ATR_TP_TEXT_BUY");
   ObjectDelete("NO_NONSENSE_ATR_SL_LINE_BUY");
   ObjectDelete("NO_NONSENSE_ATR_SL_TEXT_BUY");
   }else{
   ObjectDelete("NO_NONSENSE_ATR_TP_LINE_SELL");
   ObjectDelete("NO_NONSENSE_ATR_TP_TEXT_SELL");
   ObjectDelete("NO_NONSENSE_ATR_SL_LINE_SELL");
   ObjectDelete("NO_NONSENSE_ATR_SL_TEXT_SELL");
   }      

}

void update_n_of_bars(){

   if(FILTER_ATR==False){
      if(n_of_history_bars==0){
         if(ATR_TP_PERIOD>=ATR_SL_PERIOD){
            n_of_bars_show=Bars-ATR_TP_PERIOD-ATR_SHIFT;
         }else{
            n_of_bars_show=Bars-ATR_SL_PERIOD-ATR_SHIFT;
         }
         n_of_bars_calc=Bars;
      }else{
         if(ATR_TP_PERIOD>=ATR_SL_PERIOD){
            n_of_bars_show=n_of_history_bars-ATR_TP_PERIOD-ATR_SHIFT;
         }else{
            n_of_bars_show=n_of_history_bars-ATR_SL_PERIOD-ATR_SHIFT;
         }
         n_of_bars_calc=n_of_history_bars;
      }
   }else{
      if(n_of_history_bars==0){ 
         if(ATR_TP_PERIOD>=ATR_SL_PERIOD){
            n_of_bars_show=Bars-(sample_size+ATR_TP_PERIOD);
         }else{
            n_of_bars_show=Bars-(sample_size+ATR_SL_PERIOD);
         }
         n_of_bars_calc=Bars;
      }else{
         if(ATR_TP_PERIOD>=ATR_SL_PERIOD){
            n_of_bars_calc=n_of_history_bars+(sample_size+ATR_TP_PERIOD);
         }else{
            n_of_bars_calc=n_of_history_bars+(sample_size+ATR_SL_PERIOD);
         }
         n_of_bars_show=n_of_history_bars-ATR_SHIFT;
      }
   }       

}

double calc_lots(double stoploss, int candle){
   double lots, price_symbol=1, pip_value=1, account_value_to_use;
   string symbol_base, symbol_counter, calc_symbol, final_symbol, symbol_account_currency;
   bool invert_symbol=0;
   double lotsize = MarketInfo(Symbol(),MODE_LOTSIZE);
   if(lotsize==0){
      Print("Could not get LOT size value. The value 100000 will be used.");
      lotsize=100000;
   }
   if(ACCOUNT_CURRENCY==1){
      symbol_account_currency="USD";
   }else if(ACCOUNT_CURRENCY==2){
      symbol_account_currency="EUR";
   }else if(ACCOUNT_CURRENCY==3){
      symbol_account_currency="GBP";
   }else if(ACCOUNT_CURRENCY==4){
      symbol_account_currency="CAD";
   }else if(ACCOUNT_CURRENCY==5){
      symbol_account_currency="AUD";
   }else if(ACCOUNT_CURRENCY==6){
      symbol_account_currency="NZD";
   }else if(ACCOUNT_CURRENCY==7){
      symbol_account_currency="JPY";
   }else if(ACCOUNT_CURRENCY==8){
      symbol_account_currency="CHF";
   }else if(ACCOUNT_CURRENCY==9){
      symbol_account_currency="SGD";
   }else{
      symbol_account_currency="QUOTE";
   }

   symbol_base=StringSubstr(Symbol(),0,3);
   symbol_counter=StringSubstr(Symbol(),3,6);

   if( (symbol_base!="USD" && symbol_base!="EUR" && symbol_base!="GBP" && symbol_base!="CAD" && symbol_base!="AUD" && symbol_base!="NZD" && symbol_base!="JPY" && symbol_base!="CHF" && symbol_base!="SGD") || (symbol_counter!="USD" && symbol_counter!="EUR" && symbol_counter!="GBP" && symbol_counter!="CAD" && symbol_counter!="AUD" && symbol_counter!="NZD" && symbol_counter!="JPY" && symbol_counter!="CHF" && symbol_counter!="SGD")) {
      exit_program("(E01)","(E01) This is not one of the 35 forex pairs and it is not possible to show the trading volume value."," You can use the No Nonsense ATR in this instrument by changing the SHOW TRADING VOLUME input to NEVER");
   }

   if (StringCompare(symbol_account_currency,symbol_counter)==0 || symbol_account_currency=="QUOTE"){
      price_symbol=1;
      pip_value=(Point*lotsize);
   }else if(StringCompare(symbol_account_currency,symbol_base)==0){ // Moeda da conta ? igual ? moeda base do par
      price_symbol=Ask;
      pip_value=(Point*lotsize)/price_symbol;
   }else{
      if (symbol_account_currency=="USD") {
         if (symbol_counter=="NZD" || symbol_counter=="GBP" || symbol_counter=="AUD" || symbol_counter=="EUR") { // trocar USDNZD USDGBP USDAUD USDEUR trocar para NZDUSD GBPUSD AUDUSD EURUSD
            StringAdd(symbol_counter,symbol_account_currency);
            calc_symbol=symbol_counter;
            invert_symbol=1;
         }else{ // outros pares est?o bem // USDJPY USDCHF USDCAD USDSGD
            StringAdd(symbol_account_currency,symbol_counter);
            calc_symbol=symbol_account_currency;
         }
      }else if (symbol_account_currency=="EUR") { // pares EUR est?o todos bem // EURCAD EURJPY EURNZD EURUSD EURAUD EURCHF EURGBP EURSGD
         StringAdd(symbol_account_currency,symbol_counter);
         calc_symbol=symbol_account_currency;
      }else if (symbol_account_currency=="GBP") { 
         if (symbol_counter=="EUR") {              // GBPEUR -> EURGBP
            StringAdd(symbol_counter,symbol_account_currency);
            calc_symbol=symbol_counter;
            invert_symbol=1;
         }else{                                    // GBPCAD GBPCHF GBPJPY GBPAUD GBPNZD GBPUSD GBPSGD
            StringAdd(symbol_account_currency,symbol_counter);
            calc_symbol=symbol_account_currency;
         }
      }else if (symbol_account_currency=="CAD") { 
         if (symbol_counter=="GBP" || symbol_counter=="EUR" || symbol_counter=="USD" || symbol_counter=="AUD" || symbol_counter=="NZD") {              // CADGBP CADEUR CADUSD CADNZD CADAUD -> GBPCAD EURCAD USDCAD NZDCAD AUDCAD
            StringAdd(symbol_counter,symbol_account_currency);
            calc_symbol=symbol_counter;
            invert_symbol=1;
         }else{                                    // CADCHF CADJPY CADSGD
            StringAdd(symbol_account_currency,symbol_counter);
            calc_symbol=symbol_account_currency;
         }
      }else if (symbol_account_currency=="AUD") { 
         if (symbol_counter=="GBP" || symbol_counter=="EUR") {              // AUDEUR AUDBGBP -> EURAUD GBPAUD
            StringAdd(symbol_counter,symbol_account_currency);
            calc_symbol=symbol_counter;
            invert_symbol=1;
         }else{                                    // AUDJPY AUDCAD AUDCHF AUDUSD AUDNZD AUDSGD
            StringAdd(symbol_account_currency,symbol_counter);
            calc_symbol=symbol_account_currency;
         }
      }else if (symbol_account_currency=="NZD") { 
         if (symbol_counter=="GBP" || symbol_counter=="EUR" || symbol_counter=="AUD") {              // NZDAUD NZDEUR NZDGBP -> AUDNZD EURNZD GBPNZD
            StringAdd(symbol_counter,symbol_account_currency);
            calc_symbol=symbol_counter;
            invert_symbol=1;
         }else{                                    // NZDCHF NZDJPY NZDCAD NZDUSD NZDSGD
            StringAdd(symbol_account_currency,symbol_counter);
            calc_symbol=symbol_account_currency;
         }
      }else if (symbol_account_currency=="JPY") { 
         if (symbol_counter=="GBP" || symbol_counter=="EUR" || symbol_counter=="AUD" || symbol_counter=="CAD" || symbol_counter=="NZD" || symbol_counter=="USD" || symbol_counter=="CHF" || symbol_counter=="SGD") {              // JPYGBP JPYEUR JPYAUD JPYCAD JPYNZD JPYUSD JPYCHF JPYSGD -> GBPJPY EURJPY AUDJPY CADJPY NZDJPY USDJPY CHFJPY SGDJPY
            StringAdd(symbol_counter,symbol_account_currency);
            calc_symbol=symbol_counter;
            invert_symbol=1;
         }
      }else if (symbol_account_currency=="CHF") { 
         if (symbol_counter=="GBP" || symbol_counter=="EUR" || symbol_counter=="AUD" || symbol_counter=="CAD" || symbol_counter=="NZD" || symbol_counter=="USD") {              // CHFGBP CHFEUR CHFAUD CHFCAD CHFNZD CHFUSD -> GBPCHF EURCHF AUDCHF CADCHF NZDCHF USDCHF
            StringAdd(symbol_counter,symbol_account_currency);
            calc_symbol=symbol_counter;
            invert_symbol=1;
         }else{                                    // CHFJPY CHFSGD
            StringAdd(symbol_account_currency,symbol_counter);
            calc_symbol=symbol_account_currency;
         }
      }else if (symbol_account_currency=="SGD") { 
         if (symbol_counter=="GBP" || symbol_counter=="EUR" || symbol_counter=="AUD" || symbol_counter=="CAD" || symbol_counter=="NZD" || symbol_counter=="USD" || symbol_counter=="CHF") {              // SGDGBP SGDEUR SGDAUD SGDCAD SGDNZD SGDUSD SGDCHF -> GBPSGD EURSGD AUDSGD CADSGD NZDSGD USDSGD CHFSGD
            StringAdd(symbol_counter,symbol_account_currency);
            calc_symbol=symbol_counter;
            invert_symbol=1;
         }else{                                    // SGDJPY
            StringAdd(symbol_account_currency,symbol_counter);
            calc_symbol=symbol_account_currency;
         }
      }

      final_symbol=CURRENCY_PREFIX; 
      StringAdd(calc_symbol,CURRENCY_SUFFIX);
      StringAdd(final_symbol,calc_symbol);

      if(price_symbol==0){ // ERRO AO BUSCAR DADOS DO PAR
         exit_program("(E02)","(E02) The "+final_symbol+" pair does not exist or is not possible to obtain the price."," Offline graph? Select COUNTER CURRENCY as ACCOUNT BASE CURRENCY.");
      }else{
         if (invert_symbol==1){// par invertido logo inverter pre?o
            price_symbol=(MarketInfo(final_symbol,MODE_BID));
            pip_value=(Point*lotsize)*price_symbol;
         }else{
            price_symbol=MarketInfo(final_symbol,MODE_ASK);
            pip_value=(Point*lotsize)/price_symbol;
         }
      }

   }

   if(ACCOUNT_VALUE==0){
      account_value_to_use=AccountBalance();
   }else if(ACCOUNT_VALUE==1){
      account_value_to_use=AccountEquity();
   }else if(ACCOUNT_VALUE==2){
      account_value_to_use=AccountFreeMargin();
   }else{
      account_value_to_use=ACCOUNT_FIXED_VALUE;
    }

   lots = (account_value_to_use*(RISK/100))/(stoploss*10*pip_value);

   int norm = 0;
   if(TRADING_VOLUME_digits==0){ 
      double step = MarketInfo(Symbol(),MODE_LOTSTEP);
      double minlot = MarketInfo(Symbol(),MODE_MINLOT);
      double maxlot = MarketInfo(Symbol(),MODE_MAXLOT);

      if(step==0 || minlot==0 || maxlot==0){
         exit_program("(E03)","(E03) Could not get STEP LOT ("+DoubleToStr(step,4)+"), MIN LOT ("+DoubleToStr(minlot,4)+") and MAX LOT ("+DoubleToStr(maxlot,4)+") size value."," The AUTO option in the TRADING VOLUME RESOLUTION input can not be used, choose another resolution.");
      } 

      if (step==1)    norm = 0;
      if (step==0.1)  norm = 1;
      if (step==0.01) norm = 2;

      lots = NormalizeDouble(lots,norm);

      if (lots>maxlot){
         if(candle>0){ // deu algum erro no historico - nao ? importante
            lots=maxlot;

         }else{
            exit_program("(E04)","(E04) The value of the calculated trading volume ("+DoubleToStr((account_value_to_use*(RISK/100))/(stoploss*10*pip_value),4)+ "=~"+ DoubleToStr(lots,4)+") is bigger than the maximum allowed by the broker ("+DoubleToStr(maxlot,4)+").",

Показано первые 50% кода (символов: 31252)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
3 125,20₽ ≈ $38.20