//+------------------------------------------------------------------+ //| Options.mq5 | //| Arthur Albano | //| https://www.mql5.com/en/users/arthuralbano/ | //+------------------------------------------------------------------+ #property copyright "Arthur Albano" #property link "https://www.mql5.com/en/users/arthuralbano" #include #include #include "CSymbol.mqh" const string _SYMBOL = _Symbol; sinput uint inpFrequencia = 10; // Renderização (s): enum CalcMode { VWAP, // Session Average Weighted Last, // Last deal quote AskBidWatch, // Watch(Ask+Bid)/2 Median, // Mediana DWAP // Daily Weighted Average Price }; sinput CalcMode inpCalcMode = Median; // Modo de Cálculo: sinput ENUM_LINE_STYLE InpStyle = (ENUM_LINE_STYLE)STYLE_DOT; //Style sinput color InpColor = clrGold; //Color sinput ENUM_LINE_STYLE InpPremiumStyle = (ENUM_LINE_STYLE)STYLE_DASHDOTDOT; //Style sinput color InpPremiumColor = clrYellow; //Color sinput bool InpVerbose = false; //Print calculations sinput bool InpGraph = true; //Show Graphic sinput bool InpFilterBE = false; //Filter negative extrinsic sinput ENUM_PRICE_MODE InpPriceMode = PRICE_MODE_MEDIAN;//CSymbol PRICE double _S = 0.0; //spot (underlying/basis) price double _T = 0.0; //relative time to expiration (t/t0) double _Z = 0.0; //+1 for calls / -1 for puts double _K = 0.0; //strike double _X = 0.0; //OPM premium double _r = 0.0; //calculated return #define B(Z,K,X) {(K+Z*X)} double _B = 0.0; //Break-even //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { Comment("\nCalculando..."); EventSetTimer(inpFrequencia); if(InpVerbose==true)Print("Calculated Premium: "+DoubleToString(LSFit_OPTIONS(),4)); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { EventKillTimer(); Comment(""); } //+------------------------------------------------------------------+ //| Expert timer function | //+------------------------------------------------------------------+ void OnTimer() { EA(); } //+------------------------------------------------------------------+ void EA() { string out = "\n"; double dbOptionPrice=0.0; CSymbol _CSymbol; _CSymbol.SetSymbol(_SYMBOL); dbOptionPrice = _CSymbol.Price(InpPriceMode); if(ObjectCreate(0, "EA_PRICEOPTION", OBJ_HLINE, 0, 0, dbOptionPrice)) { ObjectSetInteger(0, "EA_PRICEOPTION", OBJPROP_STYLE, InpStyle); ObjectSetInteger(0, "EA_PRICEOPTION", OBJPROP_COLOR, InpColor); } else { Print(__FUNCTION__,": falha ao criar a linha de reposicionamento! Código de erro = ",GetLastError()); }; if(ObjectCreate(0, "OPTION_PREMIUM", OBJ_HLINE, 0, 0, LSFit_OPTIONS())) { ObjectSetInteger(0, "OPTION_PREMIUM", OBJPROP_STYLE, InpPremiumStyle); ObjectSetInteger(0, "OPTION_PREMIUM", OBJPROP_COLOR, InpPremiumColor); } else { Print(__FUNCTION__,": falha ao criar a linha de reposicionamento! Código de erro = ",GetLastError()); }; out+="Price: "+DoubleToString(NormalizeDouble(dbOptionPrice,2),2)+"\n"; out+="OPM: "+DoubleToString(NormalizeDouble(LSFit_OPTIONS(),2),2)+"\n"; out+="Break-even: "+DoubleToString(NormalizeDouble(_K+_Z*LSFit_OPTIONS(),2),2)+"\n"; Comment(out); }