if(position==NULL) return(false); m_high.Refresh(-1); m_low.Refresh(-1); int _x=StartIndex(); double _ft=ProcessFT(_x); double _type=_ft/100.0; double _atr=fmax(2.0*m_spread.GetData(_x)*m_symbol.Point(),m_high.GetData(_x)-m_low.GetData(_x))*(_type); double _sl=m_low.GetData(_x)-(m_step*_atr); double level =NormalizeDouble(m_symbol.Bid()-m_symbol.StopsLevel()*m_symbol.Point(),m_symbol.Digits()); double new_sl=NormalizeDouble(_sl,m_symbol.Digits()); double pos_sl=position.StopLoss(); double base =(pos_sl==0.0) ? position.PriceOpen() : pos_sl; sl=EMPTY_VALUE; tp=EMPTY_VALUE; if(new_sl>base && new_sl<level) sl=new_sl; //--- return(sl!=EMPTY_VALUE); } //+------------------------------------------------------------------+ //| Checking trailing stop and/or profit for short position. | //+------------------------------------------------------------------+ bool CTrailingFT::CheckTrailingStopShort(CPositionInfo *position,double &sl,double &tp) { //--- check if(position==NULL) return(false); m_high.Refresh(-1); m_low.Refresh(-1); int _x=StartIndex(); double _ft=ProcessFT(_x); double _type=_ft/100.0; double _atr=fmax(2.0*m_spread.GetData(_x)*m_symbol.Point(),m_high.GetData(_x)-m_low.GetData(_x))*(_type); double _sl=m_high.GetData(_x)+(m_step*_atr); double level =NormalizeDouble(m_symbol.Ask()+m_symbol.StopsLevel()*m_symbol.Point(),m_symbol.Digits()); double new_sl=NormalizeDouble(_sl,m_symbol.Digits()); double pos_sl=position.StopLoss(); double base =(pos_sl==0.0) ? position.PriceOpen() : pos_sl; sl=EMPTY_VALUE; tp=EMPTY_VALUE; if(new_sl<base && new_sl>level) sl=new_sl; //--- return(sl!=EMPTY_VALUE); } //+------------------------------------------------------------------+ //| Fourier Transform | //| INPUT PARAMETERS | //| Index - int, read index within price buffer. | //| OUTPUT | //| double - forecast change in price | //+------------------------------------------------------------------+ double CTrailingFT::ProcessFT(int Index) { double _ft=0.0; int _index=Index;//+StartIndex(); m_close.Refresh(-1); double _a[]; matrix _output; al_complex _f[]; //6 data points, 5 epicycles ArrayResize(_a,6);ArrayInitialize(_a,0.0); _output.Init(6,5);_output.Fill(0.0); for(int p=0;p<6;p++) { _a[p]=m_close.GetData(_index+p)-m_close.GetData(_index+p+1); } FFT.FFTR1D(_a,5,_f); for(int p=0;p<6;p++) { for(int s=0;s<5;s++) { double _divisor=(1.0/5),_angle=(p);_angle/=6; _output[p][s]=(_divisor*_a[p]*MathExp(-2.0*__PI*(_f[s].im/_f[s].re)*_angle)); } } double _close=m_close.GetData(_index)>m_close.GetData(_index+1); int _max_index=0; double _max=fabs(_output[5][_max_index]); for(int s=0;s<5;s++) { if(_max<fabs(_output[5][s])) { _max_index=s; _max=fabs(_output[5][s]); } } _ft=(_output[5][_max_index]/fmax(m_symbol.Point(),fabs(_output[5][_max_index])+fabs(_close)))*100.0; return(_ft); } //+----------------------------------------
最新の画像[もっと見る]
- 年収2000万円が狙えるクラウドセキュリティエンジニアとは? 6時間前
- 年収2000万円が狙えるクラウドセキュリティエンジニアとは? 6時間前
- 任意の期間のFXチャートをフーリエ変換して10個の成分として表示するプログラム 23時間前
- 任意の期間のFXチャートをフーリエ変換して10個の成分として表示するプログラム 23時間前
- 任意の期間のFXチャートをフーリエ変換して10個の成分として表示するプログラム 23時間前
- 任意の期間のFXチャートをフーリエ変換して10個の成分として表示するプログラム 23時間前
- 連続的なカーブを描くMQL4プログラム 24時間前
- 連続的なカーブを描くMQL4プログラム 24時間前
- 下請法の法の網の目を掻い潜る裏技とは? 1日前
- 下請法の法の網の目を掻い潜る裏技とは? 1日前