//+------------------------------------------------------------------+ //| OptionsMap.mq5 | //| Allan | //| https://www.mql5.com | //+------------------------------------------------------------------+ #include #define SWAP(A, B) { A += B; B = A - B; A -= B; } #define SORT(a,b,c) {if(a > b) SWAP(a,b) if(a > c) SWAP(a,c) if (b>c) SWAP(b,c) } //+------------------------------------------------------------------+ //| Estruturas | //+------------------------------------------------------------------+ enum CalcMode { VWAP, // Session Average Weighted Last, // Last deal quote AskBidWatch, // Watch(Ask+Bid)/2 Median, // Mediana DWAP // Daily Weighted Average Price }; enum ENUM_ShowGraph { showBidAsk, // Bid and Ask showLast, // Last showMedian, // Median showBidAskHalf,// (Bid+Ask)/2 showAll, // Show All showNone // OPM only }; enum ENUM_Rights { rightPUT, // PUT's rightCALL, // CALL's //rightBoth // Both } ; struct sOption { string strSymbol; ENUM_SYMBOL_OPTION_RIGHT enRight; double dbK; double dbP; double dbC; ulong dtExpiration; ulong dtLastDeal; double dbBid; double dbAsk; double dbPrice; }; //+------------------------------------------------------------------+ //| Globals | //+------------------------------------------------------------------+ sOption arrBruteOptions[]; //+------------------------------------------------------------------+ //| Expert input values | //+------------------------------------------------------------------+ sinput datetime inExpiration; // Expiração: sinput ENUM_Rights inRight=rightCALL; // Opções do Tipo: sinput double inR=10.75; // Retorno Referência (% a.a.): sinput ENUM_ShowGraph inShowGraph=showMedian; // Preços do gráfico: sinput int inFrequency=3; // Frequência de execução (s): //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- create timer EA(); EventSetTimer(inFrequency); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- destroy timer EventKillTimer(); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { //--- EA(); } //+------------------------------------------------------------------+ //| EA function | //+------------------------------------------------------------------+ void EA() { ObjectDelete(0,"OptionHunter_Graph"); LoadBruteOptions(); ulong vSort[][2]; ZeroMemory(vSort); ArrayResize(vSort,ArraySize(arrBruteOptions)); for(int i=0;i(SymbolInfoDouble(_Symbol,SYMBOL_LAST)*(1-0.25))) &&(SymbolInfoDouble(SymbolName(i,false),SYMBOL_OPTION_STRIKE)<(SymbolInfoDouble(_Symbol,SYMBOL_LAST)*(1+0.25))) &&(int(SymbolInfoInteger(SymbolName(i,false),SYMBOL_EXPIRATION_TIME)/86400.0)==int(inExpiration)/86400.0) //&&((SymbolInfoInteger(SymbolName(i,false),SYMBOL_OPTION_RIGHT)==SYMBOL_OPTION_RIGHT_CALL)||(SymbolInfoInteger(SymbolName(i,false),SYMBOL_OPTION_RIGHT)==SYMBOL_OPTION_RIGHT_PUT)) //&&(SymbolInfoInteger(SymbolName(i,false),SYMBOL_OPTION_RIGHT)==SYMBOL_OPTION_RIGHT_PUT) //&&(SymbolInfoInteger(SymbolName(i,false),SYMBOL_OPTION_RIGHT)==SYMBOL_OPTION_RIGHT_CALL) //&&(SymbolInfoInteger(SymbolName(i,false),SYMBOL_EXPIRATION_TIME)>D'2024.10.03 00:00:00') //&&(SymbolInfoInteger(SymbolName(i,false),SYMBOL_EXPIRATION_TIME)