Issue with CopyBuffer returning an array full of 0.0. - page 2 12 New comment Muhammad Rifai Simanjuntak 2020.12.08 06:26 #11 hi master programers can anyone explain this please I want to learn this please i lern how find wrong it at 3 night but i thing i need mentor //+------------------------------------------------------------------+ //| Optimum Remember.mq5 | //| Copyright 2020, Issam Kadhi | //| https://www.mql5.com/en/users/thelion1 | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, Issam Kadhi" #property link "https://www.mql5.com/en/users/thelion1" #property version "1.00" #property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 2 #property indicator_type1 DRAW_ARROW #property indicator_type2 DRAW_ARROW #property indicator_color1 clrGreen #property indicator_color2 clrRed #property indicator_width1 3 #property indicator_width2 3 //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ input ENUM_TIMEFRAMES TimeFrame=PERIOD_M5; input string symbol1="EURUSD"; input string symbol2="GBPUSD"; input int MaxBars=5000; input int SetNumber=5; input int X=5; input int deviation=1; input bool Alerts=true; input bool MobileNotifications=true; input string startTime="00:00"; input string endTime="22:00"; input bool trend=false; int counter=0; double buy[],sell[]; ulong chart1=-1,chart2=-1; ulong startTimes=TimeCurrent(); string tableau1[],tableau2[]; int OnInit() { SetIndexBuffer(0,buy); PlotIndexSetInteger(0,PLOT_ARROW,233); SetIndexBuffer(1,sell); PlotIndexSetInteger(1,PLOT_ARROW,234); ArraySetAsSeries(buy,true); ArraySetAsSeries(sell,true); StringSplit(startTime,':',tableau1); StringSplit(endTime,':',tableau2); // IndicatorSetInteger(INDICATOR_DIGITS,0,_Digits); // IndicatorSetInteger(INDICATOR_DIGITS,1,_Digits); //--- return(INIT_SUCCEEDED); } void OnDeinit(const int reason=0) { for(int i=0;i<Bars(Symbol(),PERIOD_CURRENT);i++) { buy[i]=0; sell[i]=0; } } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int mode; datetime times=-1; int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { if(times==iTime(Symbol(),TimeFrame,1))return rates_total; times=iTime(Symbol(),TimeFrame,1); if(Period()<(int)TimeFrame)mode=0; else mode=1; int div=MathMax(Period()/((int)TimeFrame),((int)TimeFrame)/Period()); if(already()){Comment("Setups Reached!!!");return rates_total;} int devi=deviation;devi--; long limit=MathMin((mode)? findPeriod(((ENUM_TIMEFRAMES)Period()),rates_total,TimeFrame):(rates_total*div),MaxBars)-prev_calculated-2; double close11,close21,open11,open21,high11,high21,low11,low21, close12,close22,open12,open22,high12,high22,low12,low22; for(int i=0;i<=rates_total-1; i++)//int i=MathMin(MaxBars,Bars(Symbol(),TimeFrame));i>=0;i--)// int i=0; i<=rates_total; i-+)// { if(!canTrade(iTime(Symbol(),TimeFrame,i),iTime(Symbol(),TimeFrame,i)))continue; close11=iClose(symbol1,TimeFrame,i-1); close21=iClose(symbol2,TimeFrame,i-1); close12=iClose(symbol1,TimeFrame,i-2); close22=iClose(symbol2,TimeFrame,i-2); open11=iOpen(symbol1,TimeFrame,i-1); open21=iOpen(symbol2,TimeFrame,i-1); open12=iOpen(symbol1,TimeFrame,i-2); open22=iOpen(symbol2,TimeFrame,i-2); high11=iHigh(symbol1,TimeFrame,i-1); high21=iHigh(symbol2,TimeFrame,i-1); high12=iHigh(symbol1,TimeFrame,i-2); high22=iHigh(symbol2,TimeFrame,i-2); low11=iLow(symbol1,TimeFrame,i-1); low21=iLow(symbol2,TimeFrame,i-1); low12=iLow(symbol1,TimeFrame,i-2); low22=iLow(symbol2,TimeFrame,i-2); int newI=iBarShift(Symbol(),PERIOD_CURRENT,iTime(Symbol(),TimeFrame,i-1)); int newIA=iBarShift(Symbol(),PERIOD_CURRENT,iTime(Symbol(),TimeFrame,i-1)); newI-=devi; bool selling=false,buying=false; if(!mode&&close[newIA-1]<open[div-newIA]) selling=true; else if(!mode&&close[newIA-1]>open[div-newIA]) buying=true; else if(!mode&&close[newIA-1]<open[1-newIA]) selling=true; else if(!mode&&close[newIA-1]>open[1-newIA]) buying=true; double clos1=iClose(symbol1,PERIOD_CURRENT,newIA-1); double ope1=iOpen(symbol1,PERIOD_CURRENT,newIA-1); double clos2=iClose(symbol2,PERIOD_CURRENT,newIA-1); double ope2=iOpen(symbol2,PERIOD_CURRENT,newIA-1); if(close11<open11&&close12>open12&&high11==open11&&close21>open21&&close22<open22&&low21==open21) //whatis that { if(/*Symbol()==symbol2&&*/clos2<ope2&&((trend&&buying)))//||!trend)) { buy[newI]=low[newI-1]; if(Alerts&&!i)Alert("Optimium BUY "+Symbol()); if(MobileNotifications&&!i)SendNotification("Optimium BUY "+Symbol()); } else if(/*Symbol()==symbol1&&*/clos1>ope1&&((trend&&selling)))//||!trend)) { sell[newI]=high[newI-1]; if(Alerts&&!i)Alert("Optimium SELL "+Symbol()); if(MobileNotifications&&!i)SendNotification("Optimium SELL "+Symbol()); } else Print("Wrong Symbol"); } else if(close11>open11&&close12<open12&&low11==open11&&close21<open21&&close22>open22&&high21==open21) //what is that { if(/*Symbol()==symbol2&&*/clos2>ope2&&((trend&&selling)))//||!trend)) { sell[newI]=high[newI-1]; if(Alerts&&!i)Alert("Optimium SELL "+Symbol()); if(MobileNotifications&&!i)SendNotification("Optimium SELL "+Symbol()); } else if(/*Symbol()==symbol1&&*/clos1<ope1&&((trend&&buying)))//||!trend)) { buy[newI]=low[newI-1]; if(Alerts&&!i)Alert("Optimium BUY "+Symbol()); if(MobileNotifications&&!i)SendNotification("Optimium BUY "+Symbol()); } else Print("Wrong Symbol 2"); } } return(rates_total); } //+------------------------------------------------------------------+ bool already() { int win=0,loss=0,neu=0; for(int i=1;i<Bars(Symbol(),PERIOD_CURRENT)-X-1&&(ulong)iTime(Symbol(),PERIOD_CURRENT,i)>=startTimes;i++) { if(buy[i-X-1]) { if(iClose(Symbol(),PERIOD_CURRENT,i)>buy[i-X-1])win++; else if(iClose(Symbol(),PERIOD_CURRENT,i)<buy[i-X-1])loss++; else neu++; } if(sell[i-X-1]) { if(iClose(Symbol(),PERIOD_CURRENT,i)<sell[i-X-1])win++; else if(iClose(Symbol(),PERIOD_CURRENT,i)>sell[i-X-1])loss++; else neu++; } } Comment("Wins: ",win," Losses: ",loss," rest: ",neu); return ((win-loss>=SetNumber)?true:false); } long findPeriod(ENUM_TIMEFRAMES tim, int i, ENUM_TIMEFRAMES tim2) { if(tim==tim2)return i; int lastCurrent=((int)tim2)/((int)tim); long now=((long)TimeCurrent()-(long)(iTime(Symbol(),tim2,1)+(iTime(Symbol(),tim2,2)-iTime(Symbol(),tim2,3))))/((long)tim*60); if(i<=now)return 0; return (i-now)/(lastCurrent+(long)MathMin(MathMod((i-now),lastCurrent),1)); } long bahichi(ENUM_TIMEFRAMES tim, int i, ENUM_TIMEFRAMES tim2) { if(tim==tim2)return 0; int lastCurrent=MathMax(((int)tim2)/((int)tim),((int)tim)/((int)tim2)); if((int)tim>(int)tim2){ENUM_TIMEFRAMES aux=tim; tim=tim2;tim2=aux;} long now=((long)TimeCurrent()-(long)(iTime(Symbol(),tim2,1)+(iTime(Symbol(),tim2,2)-iTime(Symbol(),tim2,3))))/((long)tim*60); return now; } bool canTrade(datetime timo1, datetime timo2) { datetime tii1=timo1; MqlDateTime tim1,tim2; TimeToStruct(timo1,tim1); TimeToStruct(timo2,tim2); tim1.min=(int)StringToInteger(tableau1[1]); tim1.hour=(int)StringToInteger(tableau1[0]); tim2.min=(int)StringToInteger(tableau2[1]); tim2.hour=(int)StringToInteger(tableau2[0]); timo1=StructToTime(tim1); timo2=StructToTime(tim2); if(tii1>=timo1&&tii1<timo2) return true; return false; } [Deleted] 2022.12.30 16:25 #12 Hey, I noticed the fisher wasnt updating on chart so i changed it. hope you like it. //+------------------------------------------------------------------+ //| Fisher Modern.mq5 | //| Copyright © 2020, Vladimir Karputov | //| https://www.mql5.com/ru/market/product/43516 | //+------------------------------------------------------------------+ #property copyright "Copyright © 2020, Vladimir Karputov" #property link "https://www.mql5.com/ru/market/product/43516" #property version "1.000" #property indicator_separate_window #property indicator_buffers 3 #property indicator_plots 1 //--- plot Fisher #property indicator_label1 "Fisher" #property indicator_type1 DRAW_COLOR_HISTOGRAM #property indicator_color1 clrLime,clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 2 #property indicator_level1 0 //--- input parameters input int Inp_ma_period = 10; // Averaging period //--- indicator buffers double FisherBuffer[]; double FisherColor[]; double IntermediateValue[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit(){ //--- indicator buffers mapping SetIndexBuffer(0,FisherBuffer,INDICATOR_DATA); SetIndexBuffer(1,FisherColor,INDICATOR_COLOR_INDEX); SetIndexBuffer(2,IntermediateValue,INDICATOR_CALCULATIONS); //--- set the accuracy of values to be displayed in the Data Window IndicatorSetInteger(INDICATOR_DIGITS,Digits()+1); //--- set as an empty value 0 PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]){ if(rates_total < Inp_ma_period) return 0; int iStart = MathMax(0, prev_calculated-Inp_ma_period); if(prev_calculated==0){ iStart = Inp_ma_period; for(int i=0; i<iStart; i++){ FisherBuffer[i]=0.0; FisherColor[i]=0.0; IntermediateValue[i]=0.0; } } for(int i=iStart; i<rates_total; i++){ double max_high = high[ArrayMaximum(high,i,Inp_ma_period)]; double min_low = low[ArrayMinimum(low,i,Inp_ma_period)]; double price = (high[i]+low[i])/2.0; double intermediate_value = (max_high-min_low==0.0)?0.0:0.33*2.0*((price-min_low)/(max_high-min_low)-0.5)+0.67*IntermediateValue[i-1]; intermediate_value = MathMin(MathMax(intermediate_value, -0.999), 0.999); //--- double calculations = (1.0-intermediate_value==0.0)?0.0:0.5*MathLog((1.0+intermediate_value)/(1.0-intermediate_value))+0.5*FisherBuffer[i-1]; FisherBuffer[i] = calculations; if(FisherBuffer[i]<0.0) FisherColor[i]=1.0; else FisherColor[i]=0.0; IntermediateValue[i]=intermediate_value; } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ 12 New comment
please i lern how find wrong it at 3 night but i thing i need mentor
Hey, I noticed the fisher wasnt updating on chart so i changed it. hope you like it.