//+------------------------------------------------------------------+
//| PREDATER_MT4_01.mq4|
//| Copyright (c) 2011, Predater |
//| http://blog.goo.ne.jp/predater |
//+------------------------------------------------------------------+
//公開Ver.1.0
//使用上の注意(使う前に読む事)
//・このプログラムを使用した結果、損害等に関しては何の責任も取りません。
//・使用、改変、転載は自己責任で行って下さい。許可は不要です。
//・このプログラムに関するいかなる質問、要望にも答えません。バグの修正も行いません。
//+------------------------------------------------------------------+
//このプログラムは円(米)ドル1分足(M1)用です。フォレックスドットコムでのみ動作を確認してます。
//トレンドの転換を見る逆バリ系プログラムです。移動平均線で判断します。
//メインとサブの条件で取引します。サブはロット数が少なく1日1回しか取引しない等の制限があります。
//午前5:30~7:30は取引を行いません。毎日午前5:30で全てのポシションを手じまいます。
//メイン条件で取引を始めたら1時間程度は次の取引をしません。
//定期的にアラート表示をします。また取引をした時にMT4を設定していればメールを出すコマンドが入ってます。
//ポジションは1つしか持ちません。ナンピン等複雑な処理はしません。
//成績はバックテストやデモ口座で確認して下さい。
//+------------------------------------------------------------------+
#property copyright "Copyright (c) 2011, Predater"
#property link "http://blog.goo.ne.jp/predater"
//マジックナンバー
#define MAGIC 20110714
//+----- 調整パラメータ ---------------------------------------------+
extern int PTpips = 200; //利益pips幅
extern int SLpips = 50; //ストップロスpips幅
extern double sht2=70; //休止時間
extern double Lots2=0.1; //注文ロット数
extern double evd2=0.35; //TS利益確定幅、この値動けば決済
extern double gvd2=0.4; //TS利益確定範囲、ここまで行けば作動
extern int trc3=7; //サブトレード回数
extern double sht9=4; //サブ/倍率
//+------------------------------------------------------------------+
int Period1 = 8; //短期
int Period2 = 11; //中期
int Period3 = 160; //長期
int Period4 = 3; //過去値
double sht1=0.01; //上がりレベル
double evd=0.2; //利益確定幅、この値動けば決済
double gvd=0.2; //利益確定範囲、ここまで行けば作動
double sht3=1.1; //倍率
double sht4=2.0; //倍率
double sht5=0.9; //倍率
double sht6=2.9; //倍率
double sht7=1.6; //倍率
double sht8=1.0; //倍率
double sht10=0.03; //V字レベル
int Period0 = 1; //現在値
double Lots = 0.1; //注文ロット数
int Slippage = 5; //許容スリップ幅
int cnt=0; //休止カウンター
int timstp = 0; //時間制限
int stt = 0; //表示カウンター
double svd=0; //購入価格
double pvd=0; //最高価格
int dpc=28; //警告表示値、何分毎
int trc=0; //トレード回数(1日)
int trc2=0; //トレード回数(実行中)
int tbs=0; //トレード種類
int tss=0; //トレードストップ時間
int sbt=0; //サブ取引
double MA1=0; //移動平均値
double MA2=0; //
double MA3=0; //
double MA4=0; //
double MA5=0; //
double MA6=0; //
double MA7=0; //
double MA8=0; //
double MA9=0; //
double MA10=0; //
double MA11=0; //
double MA12=0; //
double MA13=0; //
double MA14=0; //
string StartTime="5:30"; //トレード終了時間
string StartTime2="0:30"; //トレード制限時刻
string EndTime ="7:30"; //開始時刻
string sdate =""; //時間制限
datetime start_time = 0; //
datetime start_time2 = 0; //
datetime end_time = 0; //
int ret = 0; //
//+------------------------------------------------------------------+
//| 関数 |
//+------------------------------------------------------------------+
int FilterSignal(int signal) //時間制限関数
{
sdate = TimeToStr(TimeCurrent(), TIME_DATE);
start_time = StrToTime(sdate+" "+StartTime);
start_time2= StrToTime(sdate+" "+StartTime2);
end_time = StrToTime(sdate+" "+EndTime);
ret = 0; //終了時間から開始時間までは取引しない
tss=0; //トレード制限時刻
if(TimeCurrent() < start_time || TimeCurrent() > end_time) ret = signal;
if(TimeCurrent() < start_time && TimeCurrent()>start_time2) tss=1; //買いは夜中のみトレードストップ
return(ret);
}
void pro_reset() //リセット処理
{
svd=0; //購入価格
pvd=0; //最高価格
cnt=0; //休止カウンタ
tbs=0; //トレード種類
evd=evd2; //利益確定幅、この値動けば決済
gvd=gvd2; //利益確定範囲、ここまで行けば作動
sbt=0; //サブ取引
}
void ClosePositions() //ポジションを決済する
{
for(int i=0; i<OrdersTotal(); i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break;
if(OrderMagicNumber() != MAGIC || OrderSymbol() != Symbol()) continue;
//オーダータイプのチェック
if(OrderType()==OP_BUY){ //買い
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,White);
SendMail("MT4 Mail Alert","CloseBuy "+Symbol()+" at "+DoubleToStr(Bid,Digits));
pro_reset(); //リセット処理
break;
}
if(OrderType()==OP_SELL){ //売り
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,White);
SendMail("MT4 Mail Alert","CloseSell "+Symbol()+" at "+DoubleToStr(Ask,Digits));
pro_reset(); //リセット処理
break;
}
}
}
void pro_buy() //買い処理
{
ClosePositions(); //ポジション決済
OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-SLpips*Point,Ask+PTpips*Point,"",MAGIC,0,Blue);
Alert("Buy ", Symbol(), " at ", Ask,"_", Lots); //売買表示
SendMail("MT4 Mail Alert","Buy "+Symbol()+" at "+DoubleToStr(Ask,Digits)+"_"+DoubleToStr(Lots,Digits));
svd=MA1; //購入価格
pvd=MA1; //最高価格
cnt=sht2; //注文したらしばらく休止
trc=trc+1; //トレード回数
trc2=trc2+1; //トレード回数
tbs=1; //トレード種類
}
void pro_sell() //売り処理
{
ClosePositions(); //ポジション決済
OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+SLpips*Point,Bid-PTpips*Point,"",MAGIC,0,Red);
Alert("Sell ", Symbol(), " at ", Bid,"_", Lots); //売買表示
SendMail("MT4 Mail Alert","Sell "+Symbol()+" at "+DoubleToStr(Bid,Digits)+"_"+DoubleToStr(Lots,Digits));
svd=MA1; //購入価格
pvd=MA1; //最高価格
cnt=sht2; //注文したらしばらく休止
trc=trc+1; //トレード回数
trc2=trc2+1; //トレード回数
tbs=2; //トレード種類
}
void pro_bss(int md) //サブ処理
{
Lots=Lots2/sht9; //確率が低いので下げる
evd=evd2/2; //利益確定幅、この値動けば動作 下げる
gvd=gvd2/2; //利益確定範囲、ここまで行けば作動 下げる
sbt=1; //サブ取引
if(md==1) pro_buy(); //買い処理
if(md==2) pro_sell(); //売り処理
cnt=0; //休止無し
}
void trade_stop() //トレーリングストップ
{
if(tbs==1){ //買い
if(MA1>pvd) pvd=MA1; //ピーク値更新
if((tss==1 || sbt==1) && pvd-svd>gvd && pvd-MA1>evd){ //夜中かサブで動作
ClosePositions(); //ポジション決済
}
return; //
}
if(tbs==2){ //売り
if(MA1<pvd) pvd=MA1; //ピーク値更新
if(pvd-svd<-gvd && pvd-MA1<-evd){
ClosePositions(); //ポジション決済
}
return; //
}
}
//+------------------------------------------------------------------+
//| スタート関数 |
//+------------------------------------------------------------------+
int start()
{
Lots = Lots2; //注文ロット数
if(Volume[0]>1 || IsTradeAllowed()==false) return(0);
timstp = FilterSignal(1); //時間確認
if(stt==0 && timstp>0){ //動作表示
Alert("Predater : "+DoubleToStr(svd,Digits)+"_"+DoubleToStr(pvd,Digits)+"_"+DoubleToStr(trc,Digits)+"_"+DoubleToStr(trc2,Digits)+"_"+DoubleToStr(cnt,Digits));
}
//エントリーの時間制限
if(timstp==0){ //
ClosePositions(); //時間外ならポジション決済
if(stt==1){ //ストップ表示
Alert("Stop !! : "+DoubleToStr(svd,Digits)+"_"+DoubleToStr(pvd,Digits)+"_"+DoubleToStr(trc,Digits)+"_"+DoubleToStr(trc2,Digits));
} //
stt=stt+1; //
if(stt>dpc) stt=0; //
trc=0; //トレード回数
pro_reset(); //リセット処理
return(0); //
} //
stt=stt+1; //
if(stt>dpc) stt=0; //
//移動平均の計算
MA1 = iMA(NULL,0,Period1,0,MODE_SMA,PRICE_CLOSE,Period0);
MA2 = iMA(NULL,0,Period2,0,MODE_SMA,PRICE_CLOSE,Period0);
MA3 = iMA(NULL,0,Period1,0,MODE_SMA,PRICE_CLOSE,Period4);
MA4 = iMA(NULL,0,Period2,0,MODE_SMA,PRICE_CLOSE,Period4);
MA5 =(MA1-MA2)*sht3;
MA6 =(MA3-MA4)*sht4;
MA7 =(MA1-MA3)*sht5;
MA8 =(MA1-MA2)*sht6;
MA9 =(MA3-MA4)*sht7;
MA10 =(MA1-MA3)*sht8;
MA11 = iMA(NULL,0,Period0,0,MODE_SMA,PRICE_CLOSE,1); //V字変化検知
MA12 = iMA(NULL,0,Period0,0,MODE_SMA,PRICE_CLOSE,2);
MA13 = iMA(NULL,0,Period0,0,MODE_SMA,PRICE_CLOSE,3);
MA14 = iMA(NULL,0,Period3,0,MODE_SMA,PRICE_CLOSE,1); //長期トレンド
//買いシグナル
if(MA11<=MA14){
if(cnt==0 && MA5>sht1 && MA6<-sht1 && MA7>sht1){ //メイン条件
if(MA1-MA2>sht1 && MA3-MA4<-sht1) Lots=Lots*1.5;
pro_buy(); //買い処理
return(0); //
}
if(trc==0 && trc2<trc3 && cnt==0 && MA12-MA13<=-sht10 && MA12-MA11<=-sht10){ //サブ条件
pro_bss(1); //サブ処理買い
return(0); //
}
if(trc==0 && trc2<trc3 && cnt==0 && MA8>sht1 && MA9<-sht1 && MA10>sht1){ //サブ条件
pro_bss(1); //サブ処理買い
return(0); //
}
}
//売りシグナル
if(MA11>=MA14){
if(cnt==0 && MA5<-sht1 && MA6>sht1 && MA7<-sht1){ //メイン条件
if(MA1-MA2<-sht1 && MA3-MA4>sht1) Lots=Lots*1.5;
pro_sell(); //売り処理
return(0); //
}
if(trc==0 && trc2<trc3 && cnt==0 && MA12-MA13>=sht10 && MA12-MA11>=sht10){ //サブ条件
pro_bss(2); //サブ処理売り
return(0); //
}
if(trc==0 && trc2<trc3 && cnt==0 && MA8<-sht1 && MA9>sht1 && MA10<-sht1){ //サブ条件
pro_bss(2); //サブ処理売り
return(0); //
}
}
if(svd>0) trade_stop(); //トレーリングストップ
if(cnt>0) cnt=cnt-1; //休止カウンター
return(0);
}
//+------------------------------------------------------------------+
//| PREDATER_MT4_01.mq4|
//| Copyright (c) 2011, Predater |
//| http://blog.goo.ne.jp/predater |
//+------------------------------------------------------------------+
//公開Ver.1.0
//使用上の注意(使う前に読む事)
//・このプログラムを使用した結果、損害等に関しては何の責任も取りません。
//・使用、改変、転載は自己責任で行って下さい。許可は不要です。
//・このプログラムに関するいかなる質問、要望にも答えません。バグの修正も行いません。
//+------------------------------------------------------------------+
//このプログラムは円(米)ドル1分足(M1)用です。フォレックスドットコムでのみ動作を確認してます。
//トレンドの転換を見る逆バリ系プログラムです。移動平均線で判断します。
//メインとサブの条件で取引します。サブはロット数が少なく1日1回しか取引しない等の制限があります。
//午前5:30~7:30は取引を行いません。毎日午前5:30で全てのポシションを手じまいます。
//メイン条件で取引を始めたら1時間程度は次の取引をしません。
//定期的にアラート表示をします。また取引をした時にMT4を設定していればメールを出すコマンドが入ってます。
//ポジションは1つしか持ちません。ナンピン等複雑な処理はしません。
//成績はバックテストやデモ口座で確認して下さい。
//+------------------------------------------------------------------+
#property copyright "Copyright (c) 2011, Predater"
#property link "http://blog.goo.ne.jp/predater"
//マジックナンバー
#define MAGIC 20110714
//+----- 調整パラメータ ---------------------------------------------+
extern int PTpips = 200; //利益pips幅
extern int SLpips = 50; //ストップロスpips幅
extern double sht2=70; //休止時間
extern double Lots2=0.1; //注文ロット数
extern double evd2=0.35; //TS利益確定幅、この値動けば決済
extern double gvd2=0.4; //TS利益確定範囲、ここまで行けば作動
extern int trc3=7; //サブトレード回数
extern double sht9=4; //サブ/倍率
//+------------------------------------------------------------------+
int Period1 = 8; //短期
int Period2 = 11; //中期
int Period3 = 160; //長期
int Period4 = 3; //過去値
double sht1=0.01; //上がりレベル
double evd=0.2; //利益確定幅、この値動けば決済
double gvd=0.2; //利益確定範囲、ここまで行けば作動
double sht3=1.1; //倍率
double sht4=2.0; //倍率
double sht5=0.9; //倍率
double sht6=2.9; //倍率
double sht7=1.6; //倍率
double sht8=1.0; //倍率
double sht10=0.03; //V字レベル
int Period0 = 1; //現在値
double Lots = 0.1; //注文ロット数
int Slippage = 5; //許容スリップ幅
int cnt=0; //休止カウンター
int timstp = 0; //時間制限
int stt = 0; //表示カウンター
double svd=0; //購入価格
double pvd=0; //最高価格
int dpc=28; //警告表示値、何分毎
int trc=0; //トレード回数(1日)
int trc2=0; //トレード回数(実行中)
int tbs=0; //トレード種類
int tss=0; //トレードストップ時間
int sbt=0; //サブ取引
double MA1=0; //移動平均値
double MA2=0; //
double MA3=0; //
double MA4=0; //
double MA5=0; //
double MA6=0; //
double MA7=0; //
double MA8=0; //
double MA9=0; //
double MA10=0; //
double MA11=0; //
double MA12=0; //
double MA13=0; //
double MA14=0; //
string StartTime="5:30"; //トレード終了時間
string StartTime2="0:30"; //トレード制限時刻
string EndTime ="7:30"; //開始時刻
string sdate =""; //時間制限
datetime start_time = 0; //
datetime start_time2 = 0; //
datetime end_time = 0; //
int ret = 0; //
//+------------------------------------------------------------------+
//| 関数 |
//+------------------------------------------------------------------+
int FilterSignal(int signal) //時間制限関数
{
sdate = TimeToStr(TimeCurrent(), TIME_DATE);
start_time = StrToTime(sdate+" "+StartTime);
start_time2= StrToTime(sdate+" "+StartTime2);
end_time = StrToTime(sdate+" "+EndTime);
ret = 0; //終了時間から開始時間までは取引しない
tss=0; //トレード制限時刻
if(TimeCurrent() < start_time || TimeCurrent() > end_time) ret = signal;
if(TimeCurrent() < start_time && TimeCurrent()>start_time2) tss=1; //買いは夜中のみトレードストップ
return(ret);
}
void pro_reset() //リセット処理
{
svd=0; //購入価格
pvd=0; //最高価格
cnt=0; //休止カウンタ
tbs=0; //トレード種類
evd=evd2; //利益確定幅、この値動けば決済
gvd=gvd2; //利益確定範囲、ここまで行けば作動
sbt=0; //サブ取引
}
void ClosePositions() //ポジションを決済する
{
for(int i=0; i<OrdersTotal(); i++){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break;
if(OrderMagicNumber() != MAGIC || OrderSymbol() != Symbol()) continue;
//オーダータイプのチェック
if(OrderType()==OP_BUY){ //買い
OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,White);
SendMail("MT4 Mail Alert","CloseBuy "+Symbol()+" at "+DoubleToStr(Bid,Digits));
pro_reset(); //リセット処理
break;
}
if(OrderType()==OP_SELL){ //売り
OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,White);
SendMail("MT4 Mail Alert","CloseSell "+Symbol()+" at "+DoubleToStr(Ask,Digits));
pro_reset(); //リセット処理
break;
}
}
}
void pro_buy() //買い処理
{
ClosePositions(); //ポジション決済
OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-SLpips*Point,Ask+PTpips*Point,"",MAGIC,0,Blue);
Alert("Buy ", Symbol(), " at ", Ask,"_", Lots); //売買表示
SendMail("MT4 Mail Alert","Buy "+Symbol()+" at "+DoubleToStr(Ask,Digits)+"_"+DoubleToStr(Lots,Digits));
svd=MA1; //購入価格
pvd=MA1; //最高価格
cnt=sht2; //注文したらしばらく休止
trc=trc+1; //トレード回数
trc2=trc2+1; //トレード回数
tbs=1; //トレード種類
}
void pro_sell() //売り処理
{
ClosePositions(); //ポジション決済
OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+SLpips*Point,Bid-PTpips*Point,"",MAGIC,0,Red);
Alert("Sell ", Symbol(), " at ", Bid,"_", Lots); //売買表示
SendMail("MT4 Mail Alert","Sell "+Symbol()+" at "+DoubleToStr(Bid,Digits)+"_"+DoubleToStr(Lots,Digits));
svd=MA1; //購入価格
pvd=MA1; //最高価格
cnt=sht2; //注文したらしばらく休止
trc=trc+1; //トレード回数
trc2=trc2+1; //トレード回数
tbs=2; //トレード種類
}
void pro_bss(int md) //サブ処理
{
Lots=Lots2/sht9; //確率が低いので下げる
evd=evd2/2; //利益確定幅、この値動けば動作 下げる
gvd=gvd2/2; //利益確定範囲、ここまで行けば作動 下げる
sbt=1; //サブ取引
if(md==1) pro_buy(); //買い処理
if(md==2) pro_sell(); //売り処理
cnt=0; //休止無し
}
void trade_stop() //トレーリングストップ
{
if(tbs==1){ //買い
if(MA1>pvd) pvd=MA1; //ピーク値更新
if((tss==1 || sbt==1) && pvd-svd>gvd && pvd-MA1>evd){ //夜中かサブで動作
ClosePositions(); //ポジション決済
}
return; //
}
if(tbs==2){ //売り
if(MA1<pvd) pvd=MA1; //ピーク値更新
if(pvd-svd<-gvd && pvd-MA1<-evd){
ClosePositions(); //ポジション決済
}
return; //
}
}
//+------------------------------------------------------------------+
//| スタート関数 |
//+------------------------------------------------------------------+
int start()
{
Lots = Lots2; //注文ロット数
if(Volume[0]>1 || IsTradeAllowed()==false) return(0);
timstp = FilterSignal(1); //時間確認
if(stt==0 && timstp>0){ //動作表示
Alert("Predater : "+DoubleToStr(svd,Digits)+"_"+DoubleToStr(pvd,Digits)+"_"+DoubleToStr(trc,Digits)+"_"+DoubleToStr(trc2,Digits)+"_"+DoubleToStr(cnt,Digits));
}
//エントリーの時間制限
if(timstp==0){ //
ClosePositions(); //時間外ならポジション決済
if(stt==1){ //ストップ表示
Alert("Stop !! : "+DoubleToStr(svd,Digits)+"_"+DoubleToStr(pvd,Digits)+"_"+DoubleToStr(trc,Digits)+"_"+DoubleToStr(trc2,Digits));
} //
stt=stt+1; //
if(stt>dpc) stt=0; //
trc=0; //トレード回数
pro_reset(); //リセット処理
return(0); //
} //
stt=stt+1; //
if(stt>dpc) stt=0; //
//移動平均の計算
MA1 = iMA(NULL,0,Period1,0,MODE_SMA,PRICE_CLOSE,Period0);
MA2 = iMA(NULL,0,Period2,0,MODE_SMA,PRICE_CLOSE,Period0);
MA3 = iMA(NULL,0,Period1,0,MODE_SMA,PRICE_CLOSE,Period4);
MA4 = iMA(NULL,0,Period2,0,MODE_SMA,PRICE_CLOSE,Period4);
MA5 =(MA1-MA2)*sht3;
MA6 =(MA3-MA4)*sht4;
MA7 =(MA1-MA3)*sht5;
MA8 =(MA1-MA2)*sht6;
MA9 =(MA3-MA4)*sht7;
MA10 =(MA1-MA3)*sht8;
MA11 = iMA(NULL,0,Period0,0,MODE_SMA,PRICE_CLOSE,1); //V字変化検知
MA12 = iMA(NULL,0,Period0,0,MODE_SMA,PRICE_CLOSE,2);
MA13 = iMA(NULL,0,Period0,0,MODE_SMA,PRICE_CLOSE,3);
MA14 = iMA(NULL,0,Period3,0,MODE_SMA,PRICE_CLOSE,1); //長期トレンド
//買いシグナル
if(MA11<=MA14){
if(cnt==0 && MA5>sht1 && MA6<-sht1 && MA7>sht1){ //メイン条件
if(MA1-MA2>sht1 && MA3-MA4<-sht1) Lots=Lots*1.5;
pro_buy(); //買い処理
return(0); //
}
if(trc==0 && trc2<trc3 && cnt==0 && MA12-MA13<=-sht10 && MA12-MA11<=-sht10){ //サブ条件
pro_bss(1); //サブ処理買い
return(0); //
}
if(trc==0 && trc2<trc3 && cnt==0 && MA8>sht1 && MA9<-sht1 && MA10>sht1){ //サブ条件
pro_bss(1); //サブ処理買い
return(0); //
}
}
//売りシグナル
if(MA11>=MA14){
if(cnt==0 && MA5<-sht1 && MA6>sht1 && MA7<-sht1){ //メイン条件
if(MA1-MA2<-sht1 && MA3-MA4>sht1) Lots=Lots*1.5;
pro_sell(); //売り処理
return(0); //
}
if(trc==0 && trc2<trc3 && cnt==0 && MA12-MA13>=sht10 && MA12-MA11>=sht10){ //サブ条件
pro_bss(2); //サブ処理売り
return(0); //
}
if(trc==0 && trc2<trc3 && cnt==0 && MA8<-sht1 && MA9>sht1 && MA10<-sht1){ //サブ条件
pro_bss(2); //サブ処理売り
return(0); //
}
}
if(svd>0) trade_stop(); //トレーリングストップ
if(cnt>0) cnt=cnt-1; //休止カウンター
return(0);
}
//+------------------------------------------------------------------+