//+------------------------------------------------------------------+ //| CFP.mq4 | //| SemSemFX@rambler.ru | //| http://onix-trade.net/forum/index.php?showtopic=107 | //+------------------------------------------------------------------+ #property copyright "SemSemFX@rambler.ru" #property link "http://onix-trade.net/forum/index.php?showtopic=107" //---- string Indicator_Name = "CFP"; //---- #property indicator_separate_window #property indicator_buffers 1 #property indicator_color1 Green //---- extern int MA_Method = 3; extern int Price = 6; extern int Fast = 3; extern int Slow = 5; extern bool USD = 1; extern bool EUR = 1; extern bool GBP = 1; extern bool CHF = 1; extern bool JPY = 1; extern bool AUD = 1; extern bool CAD = 1; extern bool NZD = 1; extern int Bars.Count = 0; //---- double OUT[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators IndicatorShortName(Indicator_Name + " (" + Symbol() + ")"); SetIndexStyle(0, DRAW_LINE, DRAW_LINE, 1, Green); SetIndexBuffer(0, OUT); SetIndexLabel(0, Symbol()); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { double arrUSD, arrEUR, arrGBP, arrCHF, arrJPY, arrAUD, arrCAD, arrNZD; int limit; if (IndicatorCounted()<0) return(-1); limit=Bars-IndicatorCounted(); if (Bars.Count>0 && limit>Bars.Count) limit=Bars.Count; //---- îñíîâíîé öèêë for(int i = 0; i < limit; i++) { // Ïðåäâàðèòåëüíûé ðàññ÷åò if(EUR) { double EURUSD_Fast = ma("EURUSD", Fast, MA_Method, Price, i); double EURUSD_Slow = ma("EURUSD", Slow, MA_Method, Price, i); if(!EURUSD_Fast || !EURUSD_Slow) break; } if(GBP) { double GBPUSD_Fast = ma("GBPUSD", Fast, MA_Method, Price, i); double GBPUSD_Slow = ma("GBPUSD", Slow, MA_Method, Price, i); if(!GBPUSD_Fast || !GBPUSD_Slow) break; } if(AUD) { double AUDUSD_Fast = ma("AUDUSD", Fast, MA_Method, Price, i); double AUDUSD_Slow = ma("AUDUSD", Slow, MA_Method, Price, i); if(!AUDUSD_Fast || !AUDUSD_Slow) break; } if(NZD) { double NZDUSD_Fast = ma("NZDUSD", Fast, MA_Method, Price, i); double NZDUSD_Slow=ma("NZDUSD", Slow, MA_Method, Price, i); if(!NZDUSD_Fast || !NZDUSD_Slow) break; } if(CAD) { double USDCAD_Fast = ma("USDCAD", Fast, MA_Method, Price, i); double USDCAD_Slow = ma("USDCAD", Slow, MA_Method, Price, i); if(!USDCAD_Fast || !USDCAD_Slow) break; } if(CHF) { double USDCHF_Fast = ma("USDCHF", Fast, MA_Method, Price, i); double USDCHF_Slow = ma("USDCHF", Slow, MA_Method, Price, i); if(!USDCHF_Fast || !USDCHF_Slow) break; } if(JPY) { double USDJPY_Fast = ma("USDJPY", Fast, MA_Method, Price, i); double USDJPY_Slow = ma("USDJPY", Slow, MA_Method, Price, i); if(!USDJPY_Fast || !USDJPY_Slow) break; } // ðàññ÷åò âàëþò if(USD) { arrUSD = 0; if(EUR) arrUSD += EURUSD_Slow / EURUSD_Fast - 1; if(GBP) arrUSD += GBPUSD_Slow / GBPUSD_Fast - 1; if(AUD) arrUSD += AUDUSD_Slow / AUDUSD_Fast - 1; if(NZD) arrUSD += NZDUSD_Slow / NZDUSD_Fast - 1; if(CHF) arrUSD += USDCHF_Fast / USDCHF_Slow - 1; if(CAD) arrUSD += USDCAD_Fast / USDCAD_Slow - 1; if(JPY) arrUSD += USDJPY_Fast / USDJPY_Slow - 1; }// end if USD if(EUR) { arrEUR = 0; if(USD) arrEUR += EURUSD_Fast / EURUSD_Slow - 1; if(GBP) arrEUR += (EURUSD_Fast / GBPUSD_Fast) / (EURUSD_Slow / GBPUSD_Slow) - 1; if(AUD) arrEUR += (EURUSD_Fast / AUDUSD_Fast) / (EURUSD_Slow / AUDUSD_Slow) - 1; if(NZD) arrEUR += (EURUSD_Fast / NZDUSD_Fast) / (EURUSD_Slow / NZDUSD_Slow) - 1; if(CHF) arrEUR += (EURUSD_Fast*USDCHF_Fast) / (EURUSD_Slow*USDCHF_Slow) - 1; if(CAD) arrEUR += (EURUSD_Fast*USDCAD_Fast) / (EURUSD_Slow*USDCAD_Slow) - 1; if(JPY) arrEUR += (EURUSD_Fast*USDJPY_Fast) / (EURUSD_Slow*USDJPY_Slow) - 1; }// end if EUR if(GBP) { arrGBP = 0; if(USD) arrGBP += GBPUSD_Fast/GBPUSD_Slow-1; if(EUR) arrGBP += (EURUSD_Slow / GBPUSD_Slow) / (EURUSD_Fast / GBPUSD_Fast) - 1; if(AUD) arrGBP += (GBPUSD_Fast / AUDUSD_Fast) / (GBPUSD_Slow / AUDUSD_Slow) - 1; if(NZD) arrGBP += (GBPUSD_Fast / NZDUSD_Fast) / (GBPUSD_Slow / NZDUSD_Slow) - 1; if(CHF) arrGBP += (GBPUSD_Fast*USDCHF_Fast) / (GBPUSD_Slow*USDCHF_Slow) - 1; if(CAD) arrGBP += (GBPUSD_Fast*USDCAD_Fast) / (GBPUSD_Slow*USDCAD_Slow) - 1; if(JPY) arrGBP += (GBPUSD_Fast*USDJPY_Fast) / (GBPUSD_Slow*USDJPY_Slow) - 1; }// end if GBP if(AUD) { arrAUD = 0; if(USD) arrAUD += AUDUSD_Fast / AUDUSD_Slow - 1; if(EUR) arrAUD += (EURUSD_Slow / AUDUSD_Slow) / (EURUSD_Fast / AUDUSD_Fast) - 1; if(GBP) arrAUD += (GBPUSD_Slow / AUDUSD_Slow) / (GBPUSD_Fast / AUDUSD_Fast) - 1; if(NZD) arrAUD += (AUDUSD_Fast / NZDUSD_Fast) / (AUDUSD_Slow / NZDUSD_Slow) - 1; if(CHF) arrAUD += (AUDUSD_Fast*USDCHF_Fast) / (AUDUSD_Slow*USDCHF_Slow) - 1; if(CAD) arrAUD += (AUDUSD_Fast*USDCAD_Fast) / (AUDUSD_Slow*USDCAD_Slow) - 1; if(JPY) arrAUD += (AUDUSD_Fast*USDJPY_Fast) / (AUDUSD_Slow*USDJPY_Slow) - 1; }// end if AUD if(NZD) { arrNZD = 0; if(USD) arrNZD += NZDUSD_Fast / NZDUSD_Slow - 1; if(EUR) arrNZD += (EURUSD_Slow / NZDUSD_Slow) / (EURUSD_Fast / NZDUSD_Fast) - 1; if(GBP) arrNZD += (GBPUSD_Slow / NZDUSD_Slow) / (GBPUSD_Fast / NZDUSD_Fast) - 1; if(AUD) arrNZD += (AUDUSD_Slow / NZDUSD_Slow) / (AUDUSD_Fast / NZDUSD_Fast) - 1; if(CHF) arrNZD += (NZDUSD_Fast*USDCHF_Fast) / (NZDUSD_Slow*USDCHF_Slow) - 1; if(CAD) arrNZD += (NZDUSD_Fast*USDCAD_Fast) / (NZDUSD_Slow*USDCAD_Slow) - 1; if(JPY) arrNZD += (NZDUSD_Fast*USDJPY_Fast) / (NZDUSD_Slow*USDJPY_Slow) - 1; }// end if NZD if(CAD) { arrCAD = 0; if(USD) arrCAD += USDCAD_Slow / USDCAD_Fast - 1; if(EUR) arrCAD += (EURUSD_Slow*USDCAD_Slow) / (EURUSD_Fast*USDCAD_Fast) - 1; if(GBP) arrCAD += (GBPUSD_Slow*USDCAD_Slow) / (GBPUSD_Fast*USDCAD_Fast) - 1; if(AUD) arrCAD += (AUDUSD_Slow*USDCAD_Slow) / (AUDUSD_Fast*USDCAD_Fast) - 1; if(NZD) arrCAD += (NZDUSD_Slow*USDCAD_Slow) / (NZDUSD_Fast*USDCAD_Fast) - 1; if(CHF) arrCAD += (USDCHF_Fast / USDCAD_Fast) / (USDCHF_Slow/USDCAD_Slow) - 1; if(JPY) arrCAD += (USDJPY_Fast / USDCAD_Fast) / (USDJPY_Slow/USDCAD_Slow) - 1; }// end if CAD if(CHF) { arrCHF = 0; if(USD) arrCHF += USDCHF_Slow / USDCHF_Fast - 1; if(EUR) arrCHF += (EURUSD_Slow*USDCHF_Slow) / (EURUSD_Fast*USDCHF_Fast) - 1; if(GBP) arrCHF += (GBPUSD_Slow*USDCHF_Slow) / (GBPUSD_Fast*USDCHF_Fast) - 1; if(AUD) arrCHF += (AUDUSD_Slow*USDCHF_Slow) / (AUDUSD_Fast*USDCHF_Fast) - 1; if(NZD) arrCHF += (NZDUSD_Slow*USDCHF_Slow) / (NZDUSD_Fast*USDCHF_Fast) - 1; if(CAD) arrCHF += (USDCHF_Slow/USDCAD_Slow) / (USDCHF_Fast/USDCAD_Fast) - 1; if(JPY) arrCHF += (USDJPY_Fast/USDCHF_Fast) / (USDJPY_Slow/USDCHF_Slow) - 1; }// end if CHF if(JPY) { arrJPY = 0; if(USD) arrJPY += USDJPY_Slow / USDJPY_Fast - 1; if(EUR) arrJPY += (EURUSD_Slow*USDJPY_Slow) / (EURUSD_Fast*USDJPY_Fast) - 1; if(GBP) arrJPY += (GBPUSD_Slow*USDJPY_Slow) / (GBPUSD_Fast*USDJPY_Fast) - 1; if(AUD) arrJPY += (AUDUSD_Slow*USDJPY_Slow) / (AUDUSD_Fast*USDJPY_Fast) - 1; if(NZD) arrJPY += (NZDUSD_Slow*USDJPY_Slow) / (NZDUSD_Fast*USDJPY_Fast) - 1; if(CAD) arrJPY += (USDJPY_Slow / USDCAD_Slow) / (USDJPY_Fast / USDCAD_Fast) - 1; if(CHF) arrJPY += (USDJPY_Slow / USDCHF_Slow) / (USDJPY_Fast / USDCHF_Fast) - 1; }// end if JPY OUT[i] = 0; if(0 == StringFind(Symbol(), "USD", 0)) OUT[i] += arrUSD; if(3 == StringFind(Symbol(), "USD", 0)) OUT[i] -= arrUSD; if(0 == StringFind(Symbol(), "EUR", 0)) OUT[i] += arrEUR; if(0 == StringFind(Symbol(), "GBP", 0)) OUT[i] += arrGBP; if(3 == StringFind(Symbol(), "GBP", 0)) OUT[i] -= arrGBP; if(0 == StringFind(Symbol(), "CHF", 0)) OUT[i] += arrCHF; if(3 == StringFind(Symbol(), "CHF", 0)) OUT[i] -= arrCHF; if(3 == StringFind(Symbol(), "JPY", 0)) OUT[i] -= arrJPY; if(0 == StringFind(Symbol(), "CAD", 0)) OUT[i] += arrCAD; if(3 == StringFind(Symbol(), "CAD", 0)) OUT[i] -= arrCAD; if(0 == StringFind(Symbol(), "AUD", 0)) OUT[i] += arrAUD; if(3 == StringFind(Symbol(), "AUD", 0)) OUT[i] -= arrAUD; if(0 == StringFind(Symbol(), "NZD", 0)) OUT[i] += arrNZD; if(3 == StringFind(Symbol(), "NZD", 0)) OUT[i] -= arrNZD; }//end block for(int i=0; i<limit; i++) //---- return(0); } //+------------------------------------------------------------------+ //| Subroutine | //+------------------------------------------------------------------+ double ma(string sym, int per, int Mode, int Price, int i) { double res = 0; int k = 1; int ma_shift = 0; int tf = 0; switch(Period()) { case 1: res += iMA(sym, tf, per*k, ma_shift, Mode, Price,i); k += 5; case 5: res += iMA(sym, tf, per*k, ma_shift, Mode, Price,i); k += 3; case 15: res += iMA(sym, tf, per*k, ma_shift, Mode, Price,i); k += 2; case 30: res += iMA(sym, tf, per*k, ma_shift, Mode, Price,i); k += 2; case 60: res += iMA(sym, tf, per*k, ma_shift, Mode, Price,i); k += 4; case 240: res += iMA(sym, tf, per*k, ma_shift, Mode, Price,i); k += 6; case 1440: res += iMA(sym, tf, per*k, ma_shift, Mode, Price,i); k += 4; case 10080: res += iMA(sym, tf, per*k, ma_shift, Mode, Price,i); k += 4; case 43200: res += iMA(sym, tf, per*k, ma_shift, Mode, Price,i); } return(res); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Indicator Curves created:
Implements a curve of type DRAW_LINE
Indicators Used:
Moving average indicator
Custom Indicators Used:
Order Management characteristics:
Other Features: