double Euclidean_Metric(double & X_Data_Base[][v_dim_x], double & Vector[v_dim_x],int num_v)
数组只能通过引用的方式传值到函数中,并且你需要定义v_dim_x的值。
luenbo:
数组只能通过引用的方式传值到函数中,并且你需要定义v_dim_x的值。
//+------------------------------------------------------------------+
//| Stat_Euclidean_Metric.mq4 |
//| StatBars TO |
//| http://ridecrufter.narod.ru |
//+------------------------------------------------------------------+
#property copyright "StatBars TO"
#property link "http://ridecrufter.narod.ru"
#define v_dim_x 6 //暑腓麇耱忸 忮牝铕钼 篦噔耱怏桴 ?疣耧铉眍忄龛?..
#define Num_neighbour 10 //暑腓麇耱忸 犭桄嚅?耦皴溴?镱 觐蝾瘥??镳桧桁噱蝰 疱龛??镳屙噤脲骓铖蜩 忮牝铕??0 桦?1
extern double Lots=0.1; //lots
extern bool RiskManagement=false; //money management
extern double RiskPercent=10; //risk in percentage
extern double MaxLots=5; //lots
extern bool Base=false;
extern double sell_threshold=0.6;
extern double buy_threshold=0.6;
extern bool inverse_position_open_=true;
extern double invers_sell_threshold=0.3;
extern double invers_buy_threshold=0.3;
extern int fast=12;
extern int slow=34;
extern int MAPeriod1=2;
extern int MAPeriod2=21;
extern int MAPeriod3=55;
extern int MAPeriod4=89;
extern int MAPeriod5=144;
extern int MAPeriod6=233;
extern int MAMethod=0;
extern int MAPrice=5;
extern bool HiddenSLTP=true;
extern int tp=40;
extern int sl=30;
extern bool close_orders=false;
double base_sell[][v_dim_x];
double base_buy[][v_dim_x];
int numbers_of_vectors_sell=0;
int numbers_of_vectors_buy=0;
int init()
{
if(!Base)
{
int Hadle_1=FileOpen("sell_Position.dat",FILE_BIN|FILE_READ);
ArrayResize(base_sell,FileSize(Hadle_1)/(v_dim_x*8));
int count=0;
while(!FileIsEnding(Hadle_1))
{
base_sell[count][0]=FileReadDouble(Hadle_1,DOUBLE_VALUE);
base_sell[count][1]=FileReadDouble(Hadle_1,DOUBLE_VALUE);
base_sell[count][2]=FileReadDouble(Hadle_1,DOUBLE_VALUE);
base_sell[count][3]=FileReadDouble(Hadle_1,DOUBLE_VALUE);
base_sell[count][4]=FileReadDouble(Hadle_1,DOUBLE_VALUE);
base_sell[count][5]=FileReadDouble(Hadle_1,DOUBLE_VALUE);
Print(base_buy[count][5]);
count++;
}
numbers_of_vectors_sell=count;
int Hadle_2=FileOpen("buy_Position.dat",FILE_BIN|FILE_READ);
ArrayResize(base_buy,FileSize(Hadle_2)/(v_dim_x*8));
count=0;
while(!FileIsEnding(Hadle_2))
{
base_buy[count][0]=FileReadDouble(Hadle_2,DOUBLE_VALUE);
base_buy[count][1]=FileReadDouble(Hadle_2,DOUBLE_VALUE);
base_buy[count][2]=FileReadDouble(Hadle_2,DOUBLE_VALUE);
base_buy[count][3]=FileReadDouble(Hadle_2,DOUBLE_VALUE);
base_buy[count][4]=FileReadDouble(Hadle_2,DOUBLE_VALUE);
base_buy[count][5]=FileReadDouble(Hadle_2,DOUBLE_VALUE);
Print(base_buy[count][5]);
count++;
}
numbers_of_vectors_buy=count;
}
FileClose(Hadle_1);
FileClose(Hadle_2);
return(0);
}
int deinit()
{
if(Base)
{
int Hadle_1=FileOpen("sell_Position.dat",FILE_BIN|FILE_WRITE);
int count;
double ordinate_1,ordinate_2,ordinate_3,ordinate_4,ordinate_5;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderType()==0)
{
if(OrderProfit()>=0)//卿羼?玎镨覃忄弪? 徉玎 忮牝铕钼 潆 镱腩骅蝈朦眍 玎牮躐 铕溴痤?
{
count=iBarShift(Symbol(),Period(),OrderOpenTime());
count++;//帖 狍溴?疣耨爨蝠桠囹?镳邃簌栝 徉?镥疱?铗牮桢?铕溴疣) 黩钺?镳钽眍玷痤忄螯 筢铟眍耱?镳栳铖螯 镱玷鲨?
ordinate_1=iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,count);
ordinate_2=iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod6,0,MAMethod,MAPrice,count);
ordinate_3=iMA(Symbol(),Period(),MAPeriod2,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count);
ordinate_4=iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count);
ordinate_5=iMA(Symbol(),Period(),MAPeriod1,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,count);
FileWriteDouble(Hadle_1,ordinate_1,DOUBLE_VALUE);//青镨覃忄屐 忮牝铕 ?徉珞...
FileWriteDouble(Hadle_1,ordinate_2,DOUBLE_VALUE);
FileWriteDouble(Hadle_1,ordinate_3,DOUBLE_VALUE);
FileWriteDouble(Hadle_1,ordinate_4,DOUBLE_VALUE);
FileWriteDouble(Hadle_1,ordinate_5,DOUBLE_VALUE);
FileWriteDouble(Hadle_1,1,DOUBLE_VALUE);
}
if(OrderProfit()<0)//卿羼?玎镨覃忄弪? 徉玎 忮牝铕钼 潆 玎牮躐 铕溴痤??铗痂鲟蝈朦睇?镳铘栩铎(镳铢?泐忸? ?腩耦?
{
count=iBarShift(Symbol(),Period(),OrderOpenTime());
count++;//帖 狍溴?疣耨爨蝠桠囹?镳邃簌栝 徉?镥疱?铗牮桢?铕溴疣) 黩钺?镳钽眍玷痤忄螯 筢铟眍耱?镳栳铖螯 镱玷鲨?
ordinate_1=iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,count);
ordinate_2=iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod6,0,MAMethod,MAPrice,count);
ordinate_3=iMA(Symbol(),Period(),MAPeriod2,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count);
ordinate_4=iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count);
ordinate_5=iMA(Symbol(),Period(),MAPeriod1,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,count);
FileWriteDouble(Hadle_1,ordinate_1,DOUBLE_VALUE);//青镨覃忄屐 忮牝铕 ?徉珞...
FileWriteDouble(Hadle_1,ordinate_2,DOUBLE_VALUE);
FileWriteDouble(Hadle_1,ordinate_3,DOUBLE_VALUE);
FileWriteDouble(Hadle_1,ordinate_4,DOUBLE_VALUE);
FileWriteDouble(Hadle_1,ordinate_5,DOUBLE_VALUE);
FileWriteDouble(Hadle_1,0,DOUBLE_VALUE);//吾疣蜩螯 忭桁囗桢 黩?玟羼?忮牝铕 镱戾麇?赅?0, ?恹 赅?1
}
}
}
int Hadle_2=FileOpen("buy_Position.dat",FILE_BIN|FILE_WRITE);
for(i=OrdersHistoryTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderType()==1)//义镥瘘 玎镨覃忄屐 徉珞 潆 觐痤蜿桴 镱玷鲨?
{
if(OrderProfit()>=0)//卿羼?玎镨覃忄弪? 徉玎 忮牝铕钼 潆 镱腩骅蝈朦眍 玎牮躐 铕溴痤?
{
count=iBarShift(Symbol(),Period(),OrderOpenTime());
count++;//帖 狍溴?疣耨爨蝠桠囹?镳邃簌栝 徉?镥疱?铗牮桢?铕溴疣) 黩钺?镳钽眍玷痤忄螯 筢铟眍耱?镳栳铖螯 镱玷鲨?
ordinate_1=iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,count);
ordinate_2=iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod6,0,MAMethod,MAPrice,count);
ordinate_3=iMA(Symbol(),Period(),MAPeriod2,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count);
ordinate_4=iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count);
ordinate_5=iMA(Symbol(),Period(),MAPeriod1,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,count);
FileWriteDouble(Hadle_2,ordinate_1,DOUBLE_VALUE);//青镨覃忄屐 忮牝铕 ?徉珞...
FileWriteDouble(Hadle_2,ordinate_2,DOUBLE_VALUE);
FileWriteDouble(Hadle_2,ordinate_3,DOUBLE_VALUE);
FileWriteDouble(Hadle_2,ordinate_4,DOUBLE_VALUE);
FileWriteDouble(Hadle_2,ordinate_5,DOUBLE_VALUE);
FileWriteDouble(Hadle_2,1,DOUBLE_VALUE);
}
if(OrderProfit()<0)//卿羼?玎镨覃忄弪? 徉玎 忮牝铕钼 潆 玎牮躐 铕溴痤??铗痂鲟蝈朦睇?镳铘栩铎(镳铢?泐忸? ?腩耦?
{
count=iBarShift(Symbol(),Period(),OrderOpenTime());
count++;//帖 狍溴?疣耨爨蝠桠囹?镳邃簌栝 徉?镥疱?铗牮桢?铕溴疣) 黩钺?镳钽眍玷痤忄螯 筢铟眍耱?镳栳铖螯 镱玷鲨?
ordinate_1=iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,count);
ordinate_2=iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod6,0,MAMethod,MAPrice,count);
ordinate_3=iMA(Symbol(),Period(),MAPeriod2,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count);
ordinate_4=iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count);
ordinate_5=iMA(Symbol(),Period(),MAPeriod1,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,count);
FileWriteDouble(Hadle_2,ordinate_1,DOUBLE_VALUE);//青镨覃忄屐 忮牝铕 ?徉珞...
FileWriteDouble(Hadle_2,ordinate_2,DOUBLE_VALUE);
FileWriteDouble(Hadle_2,ordinate_3,DOUBLE_VALUE);
FileWriteDouble(Hadle_2,ordinate_4,DOUBLE_VALUE);
FileWriteDouble(Hadle_2,ordinate_5,DOUBLE_VALUE);
FileWriteDouble(Hadle_2,0,DOUBLE_VALUE);//吾疣蜩螯 忭桁囗桢 黩?玟羼?忮牝铕 镱戾麇?赅?0, ?恹 赅?1
}
}
}
}
return(0);
}
int start()
{
bool MM=RiskManagement;
if(MM){if(RiskPercent<0.1||RiskPercent>100){Comment("Invalid Risk Value.");return(0);}
else{Lots=MathFloor((AccountFreeMargin()*AccountLeverage()*RiskPercent*Point*100)/(Ask*MarketInfo(Symbol(),MODE_LOTSIZE)*
MarketInfo(Symbol(),MODE_MINLOT)))*MarketInfo(Symbol(),MODE_MINLOT);}}
if(MM==false){Lots=Lots;}
if(Lots>MaxLots)Lots=MaxLots;
if((HiddenSLTP&&(Bid-OrderOpenPrice())/Point>=tp)||(HiddenSLTP&&(OrderOpenPrice()-Ask)/Point>=sl))Close_Orders_by_type(OP_SELL);
if((HiddenSLTP&&(OrderOpenPrice()-Ask)/Point>=tp)||(HiddenSLTP&&(Bid-OrderOpenPrice())/Point>=sl))Close_Orders_by_type(OP_BUY);
if(!isNewBar())return(0);
double MACD_1=iMACD(Symbol(),Period(),fast,slow,9,PRICE_TYPICAL,0,1);
double MACD_2=iMACD(Symbol(),Period(),fast,slow,9,PRICE_TYPICAL,0,2);
double MACD_3=iMACD(Symbol(),Period(),fast,slow,9,PRICE_TYPICAL,0,3);
double Prob_win;
double ve駎or[5];
if(Base)
{
if(MACD_3<=MACD_2 && MACD_2>MACD_1)
{
if(close_orders)Close_Orders_by_type(OP_SELL);
if(HiddenSLTP)OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0);
else OrderSend(Symbol(),OP_BUY,Lots,Bid,3,Ask+sl*Point,Bid-tp*Point);
}
if(MACD_3>=MACD_2 && MACD_2<MACD_1)
{
if(close_orders)Close_Orders_by_type(OP_BUY);
if(HiddenSLTP)OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0);
else OrderSend(Symbol(),OP_SELL,Lots,Ask,3,Bid-sl*Point,Ask+tp*Point);
}
}
if(!Base)
{
if(MACD_3<=MACD_2 && MACD_2>MACD_1)
{
if(close_orders)Close_All_Orders();
ve駎or[0]=iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,1);
ve駎or[1]=iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod6,0,MAMethod,MAPrice,1);
ve駎or[2]=iMA(Symbol(),Period(),MAPeriod2,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,1);
ve駎or[3]=iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,1);
ve駎or[4]=iMA(Symbol(),Period(),MAPeriod1,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,1);
Prob_win=Euclidean_Metric(base_buy,ve駎or,numbers_of_vectors_buy);
if(Prob_win>=buy_threshold){
if(HiddenSLTP)OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0);
else OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+sl*Point,Bid-tp*Point);}
if(inverse_position_open_&& Prob_win<=invers_buy_threshold){
if(HiddenSLTP)OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0);
else OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-sl*Point,Ask+tp*Point);}
}
if(MACD_3>=MACD_2 && MACD_2<MACD_1)
{
if(close_orders)Close_All_Orders();
ve駎or[0]=iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,1);
ve駎or[1]=iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod6,0,MAMethod,MAPrice,1);
ve駎or[2]=iMA(Symbol(),Period(),MAPeriod2,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,1);
ve駎or[3]=iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,1);
ve駎or[4]=iMA(Symbol(),Period(),MAPeriod1,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,1);
Prob_win=Euclidean_Metric(base_sell,ve駎or,numbers_of_vectors_sell);
if(Prob_win>=sell_threshold){
if(HiddenSLTP)OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0);
else OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-sl*Point,Ask+tp*Point);}
if(inverse_position_open_&& Prob_win<=invers_sell_threshold){
if(HiddenSLTP)OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0);
else OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+sl*Point,Bid-tp*Point);}
}
}
return(0);
}
void Close_Orders_by_type(int type)
{
for(int num=OrdersTotal()-1;num>=0;num--)
{
OrderSelect(num,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==type)
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,Gold);
}
}
void Close_All_Orders()
{
for(int num=OrdersTotal()-1;num>=0;num--)
{
OrderSelect(num,SELECT_BY_POS,MODE_TRADES);
if(OrderProfit()>0)
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,Gold);
}
}
double Euclidean_Metric(double&X_Data_Base[][v_dim_x], double Vector [v_dim_x],int num_v )
{
int i=0,i1=0,i3,i2,i4;
double Metric[1];
double t,sum;
ArrayResize(Metric,num_v);
ArrayInitialize(Metric,0.0);
for(i=0;i<num_v;i++)
{
for(i1=0;i1<v_dim_x-1;i1++)Metric[i]+=MathPow(X_Data_Base[i][i1]-Vector[i1],2);
Metric[i]=MathSqrt(Metric[i]);
}
//sort by ASCEND Metric
for(i3=0;i3<num_v-1;i3++)
for(i2=i3+1;i2<num_v;i2++)
if(Metric[i3]>Metric[i2])
{
t=Metric[i3];
Metric[i3]=Metric[i2];
Metric[i2]=t;
for(i4=0;i4<v_dim_x;i4++)
{
t=X_Data_Base[i3][i4];
X_Data_Base[i3][i4]=X_Data_Base[i2][i4];
X_Data_Base[i2][i4]=t;
}
}
sum=0;
for(i=0;i<Num_neighbour;i++)
{
sum+=X_Data_Base[i][5];//耋祆桊箦?0 ?1 犭桄嚅?耦皴溴?黩钺?恹忮耱?栩钽钼簋 忮痤蝽铖螯 恹桡瘥 ?铋 皲咫赍
//Print(X_Data_Base[i][5]);
}
return(sum/Num_neighbour);
}
bool isNewBar()
{
static datetime BarTime;
bool res=false;
if (BarTime!=Time[0])
{
BarTime=Time[0];
res=true;
}
return(res);
}
fanzt2003:
这个为什么只能实盘不能演示哪!!!!
//+------------------------------------------------------------------+
//| Stat_Euclidean_Metric.mq4 |
//| StatBars TO |
//| http://ridecrufter.narod.ru |
//+------------------------------------------------------------------+
#property copyright "StatBars TO"
#property link "http://ridecrufter.narod.ru"
#define v_dim_x 6 //暑腓麇耱忸 忮牝铕钼 篦噔耱怏桴 ?疣耧铉眍忄龛?..
#define Num_neighbour 10 //暑腓麇耱忸 犭桄嚅?耦皴溴?镱 觐蝾瘥??镳桧桁噱蝰 疱龛??镳屙噤脲骓铖蜩 忮牝铕??0 桦?1
extern double Lots=0.1; //lots
extern bool RiskManagement=false; //money management
extern double RiskPercent=10; //risk in percentage
extern double MaxLots=5; //lots
extern bool Base=false;
extern double sell_threshold=0.6;
extern double buy_threshold=0.6;
extern bool inverse_position_open_=true;
extern double invers_sell_threshold=0.3;
extern double invers_buy_threshold=0.3;
extern int fast=12;
extern int slow=34;
extern int MAPeriod1=2;
extern int MAPeriod2=21;
extern int MAPeriod3=55;
extern int MAPeriod4=89;
extern int MAPeriod5=144;
extern int MAPeriod6=233;
extern int MAMethod=0;
extern int MAPrice=5;
extern bool HiddenSLTP=true;
extern int tp=40;
extern int sl=30;
extern bool close_orders=false;
double base_sell[][v_dim_x];
double base_buy[][v_dim_x];
int numbers_of_vectors_sell=0;
int numbers_of_vectors_buy=0;
int init()
{
if(!Base)
{
int Hadle_1=FileOpen("sell_Position.dat",FILE_BIN|FILE_READ);
ArrayResize(base_sell,FileSize(Hadle_1)/(v_dim_x*8));
int count=0;
while(!FileIsEnding(Hadle_1))
{
base_sell[count][0]=FileReadDouble(Hadle_1,DOUBLE_VALUE);
base_sell[count][1]=FileReadDouble(Hadle_1,DOUBLE_VALUE);
base_sell[count][2]=FileReadDouble(Hadle_1,DOUBLE_VALUE);
base_sell[count][3]=FileReadDouble(Hadle_1,DOUBLE_VALUE);
base_sell[count][4]=FileReadDouble(Hadle_1,DOUBLE_VALUE);
base_sell[count][5]=FileReadDouble(Hadle_1,DOUBLE_VALUE);
Print(base_buy[count][5]);
count++;
}
numbers_of_vectors_sell=count;
int Hadle_2=FileOpen("buy_Position.dat",FILE_BIN|FILE_READ);
ArrayResize(base_buy,FileSize(Hadle_2)/(v_dim_x*8));
count=0;
while(!FileIsEnding(Hadle_2))
{
base_buy[count][0]=FileReadDouble(Hadle_2,DOUBLE_VALUE);
base_buy[count][1]=FileReadDouble(Hadle_2,DOUBLE_VALUE);
base_buy[count][2]=FileReadDouble(Hadle_2,DOUBLE_VALUE);
base_buy[count][3]=FileReadDouble(Hadle_2,DOUBLE_VALUE);
base_buy[count][4]=FileReadDouble(Hadle_2,DOUBLE_VALUE);
base_buy[count][5]=FileReadDouble(Hadle_2,DOUBLE_VALUE);
Print(base_buy[count][5]);
count++;
}
numbers_of_vectors_buy=count;
}
FileClose(Hadle_1);
FileClose(Hadle_2);
return(0);
}
int deinit()
{
if(Base)
{
int Hadle_1=FileOpen("sell_Position.dat",FILE_BIN|FILE_WRITE);
int count;
double ordinate_1,ordinate_2,ordinate_3,ordinate_4,ordinate_5;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderType()==0)
{
if(OrderProfit()>=0)//卿羼?玎镨覃忄弪? 徉玎 忮牝铕钼 潆 镱腩骅蝈朦眍 玎牮躐 铕溴痤?
{
count=iBarShift(Symbol(),Period(),OrderOpenTime());
count++;//帖 狍溴?疣耨爨蝠桠囹?镳邃簌栝 徉?镥疱?铗牮桢?铕溴疣) 黩钺?镳钽眍玷痤忄螯 筢铟眍耱?镳栳铖螯 镱玷鲨?
ordinate_1=iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,count);
ordinate_2=iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod6,0,MAMethod,MAPrice,count);
ordinate_3=iMA(Symbol(),Period(),MAPeriod2,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count);
ordinate_4=iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count);
ordinate_5=iMA(Symbol(),Period(),MAPeriod1,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,count);
FileWriteDouble(Hadle_1,ordinate_1,DOUBLE_VALUE);//青镨覃忄屐 忮牝铕 ?徉珞...
FileWriteDouble(Hadle_1,ordinate_2,DOUBLE_VALUE);
FileWriteDouble(Hadle_1,ordinate_3,DOUBLE_VALUE);
FileWriteDouble(Hadle_1,ordinate_4,DOUBLE_VALUE);
FileWriteDouble(Hadle_1,ordinate_5,DOUBLE_VALUE);
FileWriteDouble(Hadle_1,1,DOUBLE_VALUE);
}
if(OrderProfit()<0)//卿羼?玎镨覃忄弪? 徉玎 忮牝铕钼 潆 玎牮躐 铕溴痤??铗痂鲟蝈朦睇?镳铘栩铎(镳铢?泐忸? ?腩耦?
{
count=iBarShift(Symbol(),Period(),OrderOpenTime());
count++;//帖 狍溴?疣耨爨蝠桠囹?镳邃簌栝 徉?镥疱?铗牮桢?铕溴疣) 黩钺?镳钽眍玷痤忄螯 筢铟眍耱?镳栳铖螯 镱玷鲨?
ordinate_1=iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,count);
ordinate_2=iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod6,0,MAMethod,MAPrice,count);
ordinate_3=iMA(Symbol(),Period(),MAPeriod2,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count);
ordinate_4=iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count);
ordinate_5=iMA(Symbol(),Period(),MAPeriod1,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,count);
FileWriteDouble(Hadle_1,ordinate_1,DOUBLE_VALUE);//青镨覃忄屐 忮牝铕 ?徉珞...
FileWriteDouble(Hadle_1,ordinate_2,DOUBLE_VALUE);
FileWriteDouble(Hadle_1,ordinate_3,DOUBLE_VALUE);
FileWriteDouble(Hadle_1,ordinate_4,DOUBLE_VALUE);
FileWriteDouble(Hadle_1,ordinate_5,DOUBLE_VALUE);
FileWriteDouble(Hadle_1,0,DOUBLE_VALUE);//吾疣蜩螯 忭桁囗桢 黩?玟羼?忮牝铕 镱戾麇?赅?0, ?恹 赅?1
}
}
}
int Hadle_2=FileOpen("buy_Position.dat",FILE_BIN|FILE_WRITE);
for(i=OrdersHistoryTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if(OrderType()==1)//义镥瘘 玎镨覃忄屐 徉珞 潆 觐痤蜿桴 镱玷鲨?
{
if(OrderProfit()>=0)//卿羼?玎镨覃忄弪? 徉玎 忮牝铕钼 潆 镱腩骅蝈朦眍 玎牮躐 铕溴痤?
{
count=iBarShift(Symbol(),Period(),OrderOpenTime());
count++;//帖 狍溴?疣耨爨蝠桠囹?镳邃簌栝 徉?镥疱?铗牮桢?铕溴疣) 黩钺?镳钽眍玷痤忄螯 筢铟眍耱?镳栳铖螯 镱玷鲨?
ordinate_1=iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,count);
ordinate_2=iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod6,0,MAMethod,MAPrice,count);
ordinate_3=iMA(Symbol(),Period(),MAPeriod2,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count);
ordinate_4=iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count);
ordinate_5=iMA(Symbol(),Period(),MAPeriod1,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,count);
FileWriteDouble(Hadle_2,ordinate_1,DOUBLE_VALUE);//青镨覃忄屐 忮牝铕 ?徉珞...
FileWriteDouble(Hadle_2,ordinate_2,DOUBLE_VALUE);
FileWriteDouble(Hadle_2,ordinate_3,DOUBLE_VALUE);
FileWriteDouble(Hadle_2,ordinate_4,DOUBLE_VALUE);
FileWriteDouble(Hadle_2,ordinate_5,DOUBLE_VALUE);
FileWriteDouble(Hadle_2,1,DOUBLE_VALUE);
}
if(OrderProfit()<0)//卿羼?玎镨覃忄弪? 徉玎 忮牝铕钼 潆 玎牮躐 铕溴痤??铗痂鲟蝈朦睇?镳铘栩铎(镳铢?泐忸? ?腩耦?
{
count=iBarShift(Symbol(),Period(),OrderOpenTime());
count++;//帖 狍溴?疣耨爨蝠桠囹?镳邃簌栝 徉?镥疱?铗牮桢?铕溴疣) 黩钺?镳钽眍玷痤忄螯 筢铟眍耱?镳栳铖螯 镱玷鲨?
ordinate_1=iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,count);
ordinate_2=iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod6,0,MAMethod,MAPrice,count);
ordinate_3=iMA(Symbol(),Period(),MAPeriod2,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count);
ordinate_4=iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,count);
ordinate_5=iMA(Symbol(),Period(),MAPeriod1,0,MAMethod,MAPrice,count)/iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,count);
FileWriteDouble(Hadle_2,ordinate_1,DOUBLE_VALUE);//青镨覃忄屐 忮牝铕 ?徉珞...
FileWriteDouble(Hadle_2,ordinate_2,DOUBLE_VALUE);
FileWriteDouble(Hadle_2,ordinate_3,DOUBLE_VALUE);
FileWriteDouble(Hadle_2,ordinate_4,DOUBLE_VALUE);
FileWriteDouble(Hadle_2,ordinate_5,DOUBLE_VALUE);
FileWriteDouble(Hadle_2,0,DOUBLE_VALUE);//吾疣蜩螯 忭桁囗桢 黩?玟羼?忮牝铕 镱戾麇?赅?0, ?恹 赅?1
}
}
}
}
return(0);
}
int start()
{
bool MM=RiskManagement;
if(MM){if(RiskPercent<0.1||RiskPercent>100){Comment("Invalid Risk Value.");return(0);}
else{Lots=MathFloor((AccountFreeMargin()*AccountLeverage()*RiskPercent*Point*100)/(Ask*MarketInfo(Symbol(),MODE_LOTSIZE)*
MarketInfo(Symbol(),MODE_MINLOT)))*MarketInfo(Symbol(),MODE_MINLOT);}}
if(MM==false){Lots=Lots;}
if(Lots>MaxLots)Lots=MaxLots;
if((HiddenSLTP&&(Bid-OrderOpenPrice())/Point>=tp)||(HiddenSLTP&&(OrderOpenPrice()-Ask)/Point>=sl))Close_Orders_by_type(OP_SELL);
if((HiddenSLTP&&(OrderOpenPrice()-Ask)/Point>=tp)||(HiddenSLTP&&(Bid-OrderOpenPrice())/Point>=sl))Close_Orders_by_type(OP_BUY);
if(!isNewBar())return(0);
double MACD_1=iMACD(Symbol(),Period(),fast,slow,9,PRICE_TYPICAL,0,1);
double MACD_2=iMACD(Symbol(),Period(),fast,slow,9,PRICE_TYPICAL,0,2);
double MACD_3=iMACD(Symbol(),Period(),fast,slow,9,PRICE_TYPICAL,0,3);
double Prob_win;
double ve駎or[5];
if(Base)
{
if(MACD_3<=MACD_2 && MACD_2>MACD_1)
{
if(close_orders)Close_Orders_by_type(OP_SELL);
if(HiddenSLTP)OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0);
else OrderSend(Symbol(),OP_BUY,Lots,Bid,3,Ask+sl*Point,Bid-tp*Point);
}
if(MACD_3>=MACD_2 && MACD_2<MACD_1)
{
if(close_orders)Close_Orders_by_type(OP_BUY);
if(HiddenSLTP)OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0);
else OrderSend(Symbol(),OP_SELL,Lots,Ask,3,Bid-sl*Point,Ask+tp*Point);
}
}
if(!Base)
{
if(MACD_3<=MACD_2 && MACD_2>MACD_1)
{
if(close_orders)Close_All_Orders();
ve駎or[0]=iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,1);
ve駎or[1]=iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod6,0,MAMethod,MAPrice,1);
ve駎or[2]=iMA(Symbol(),Period(),MAPeriod2,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,1);
ve駎or[3]=iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,1);
ve駎or[4]=iMA(Symbol(),Period(),MAPeriod1,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,1);
Prob_win=Euclidean_Metric(base_buy,ve駎or,numbers_of_vectors_buy);
if(Prob_win>=buy_threshold){
if(HiddenSLTP)OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0);
else OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+sl*Point,Bid-tp*Point);}
if(inverse_position_open_&& Prob_win<=invers_buy_threshold){
if(HiddenSLTP)OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0);
else OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-sl*Point,Ask+tp*Point);}
}
if(MACD_3>=MACD_2 && MACD_2<MACD_1)
{
if(close_orders)Close_All_Orders();
ve駎or[0]=iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,1);
ve駎or[1]=iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod6,0,MAMethod,MAPrice,1);
ve駎or[2]=iMA(Symbol(),Period(),MAPeriod2,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,1);
ve駎or[3]=iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,1);
ve駎or[4]=iMA(Symbol(),Period(),MAPeriod1,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,1);
Prob_win=Euclidean_Metric(base_sell,ve駎or,numbers_of_vectors_sell);
if(Prob_win>=sell_threshold){
if(HiddenSLTP)OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0);
else OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-sl*Point,Ask+tp*Point);}
if(inverse_position_open_&& Prob_win<=invers_sell_threshold){
if(HiddenSLTP)OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0);
else OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+sl*Point,Bid-tp*Point);}
}
}
return(0);
}
void Close_Orders_by_type(int type)
{
for(int num=OrdersTotal()-1;num>=0;num--)
{
OrderSelect(num,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==type)
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,Gold);
}
}
void Close_All_Orders()
{
for(int num=OrdersTotal()-1;num>=0;num--)
{
OrderSelect(num,SELECT_BY_POS,MODE_TRADES);
if(OrderProfit()>0)
OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,Gold);
}
}
double Euclidean_Metric(double&X_Data_Base[][v_dim_x], double Vector [v_dim_x],int num_v )
{
int i=0,i1=0,i3,i2,i4;
double Metric[1];
double t,sum;
ArrayResize(Metric,num_v);
ArrayInitialize(Metric,0.0);
for(i=0;i<num_v;i++)
{
for(i1=0;i1<v_dim_x-1;i1++)Metric[i]+=MathPow(X_Data_Base[i][i1]-Vector[i1],2);
Metric[i]=MathSqrt(Metric[i]);
}
//sort by ASCEND Metric
for(i3=0;i3<num_v-1;i3++)
for(i2=i3+1;i2<num_v;i2++)
if(Metric[i3]>Metric[i2])
{
t=Metric[i3];
Metric[i3]=Metric[i2];
Metric[i2]=t;
for(i4=0;i4<v_dim_x;i4++)
{
t=X_Data_Base[i3][i4];
X_Data_Base[i3][i4]=X_Data_Base[i2][i4];
X_Data_Base[i2][i4]=t;
}
}
sum=0;
for(i=0;i<Num_neighbour;i++)
{
sum+=X_Data_Base[i][5];//耋祆桊箦?0 ?1 犭桄嚅?耦皴溴?黩钺?恹忮耱?栩钽钼簋 忮痤蝽铖螯 恹桡瘥 ?铋 皲咫赍
//Print(X_Data_Base[i][5]);
}
return(sum/Num_neighbour);
}
bool isNewBar()
{
static datetime BarTime;
bool res=false;
if (BarTime!=Time[0])
{
BarTime=Time[0];
res=true;
}
return(res);
}
代码请先点“SRC”再贴到里面:
//+------------------------------------------------------------------+ //| Stat_Euclidean_Metric.mq4 | //| StatBars TO | //| http://ridecrufter.narod.ru | //+------------------------------------------------------------------+ #property copyright "StatBars TO" #property link "http://ridecrufter.narod.ru" #define v_dim_x 6 //暑腓麇耱忸 忮牝铕钼 篦噔耱怏桴 ?疣耧铉眍忄龛?.. #define Num_neighbour 10 //暑腓麇耱忸 犭桄嚅?耦皴溴?镱 觐蝾瘥??镳桧桁噱蝰 疱龛??镳屙噤脲骓铖蜩 忮牝铕??0 桦?1 extern double Lots=0.1; //lots extern bool RiskManagement=false; //money management extern double RiskPercent=10; //risk in percentage extern double MaxLots=5; //lots extern bool Base=false; extern double sell_threshold=0.6; extern double buy_threshold=0.6; extern bool inverse_position_open_=true; extern double invers_sell_threshold=0.3; extern double invers_buy_threshold=0.3; ...
我也遇到类似问题。MQL4更新了以后,可以在界面上添加一个按钮用来执行操作。实盘时可以用来下单,但是复盘时,这个按钮无效。复盘无发检测点击事件。
dayuan000:
我也遇到类似问题。MQL4更新了以后,可以在界面上添加一个按钮用来执行操作。实盘时可以用来下单,但是复盘时,这个按钮无效。复盘无发检测点击事件。
我恰好问过官方,他们的回复是Strategy tester 不支持 对CHART EVENT 事件的响应.
我也遇到类似问题。MQL4更新了以后,可以在界面上添加一个按钮用来执行操作。实盘时可以用来下单,但是复盘时,这个按钮无效。复盘无发检测点击事件。
//+------------------------------------------------------------------+ //| Stat_Euclidean_Metric.mq4 | //| StatBars TO | //| http://ridecrufter.narod.ru | //+------------------------------------------------------------------+ #property copyright "StatBars TO" #property link "http://ridecrufter.narod.ru" #define v_dim_x 6 #define Num_neighbour 10 extern bool Base=false; extern double buy_threshold=0.6; extern double sell_threshold=0.6; extern bool inverse_position_open_=true; extern double invers_buy_threshold=0.3; extern double invers_sell_threshold=0.3; extern int fast=12; extern int slow=34; extern int tp=40; extern int sl=30; extern bool close_orders=false; double base_buy[][v_dim_x]; double base_sell[][v_dim_x]; int numbers_of_vectors_buy=0; int numbers_of_vectors_sell=0; int init() { if(!Base) { int Hadle_1=FileOpen("Buy_Position.dat",FILE_BIN|FILE_READ); ArrayResize(base_buy,FileSize(Hadle_1)/(v_dim_x*8)); int count=0; while(!FileIsEnding(Hadle_1)) { base_buy[count][0]=FileReadDouble(Hadle_1,DOUBLE_VALUE); base_buy[count][1]=FileReadDouble(Hadle_1,DOUBLE_VALUE); base_buy[count][2]=FileReadDouble(Hadle_1,DOUBLE_VALUE); base_buy[count][3]=FileReadDouble(Hadle_1,DOUBLE_VALUE); base_buy[count][4]=FileReadDouble(Hadle_1,DOUBLE_VALUE); base_buy[count][5]=FileReadDouble(Hadle_1,DOUBLE_VALUE); Print(base_sell[count][5]); count++; } numbers_of_vectors_buy=count; int Hadle_2=FileOpen("Sell_Position.dat",FILE_BIN|FILE_READ); ArrayResize(base_sell,FileSize(Hadle_2)/(v_dim_x*8)); count=0; while(!FileIsEnding(Hadle_2)) { base_sell[count][0]=FileReadDouble(Hadle_2,DOUBLE_VALUE); base_sell[count][1]=FileReadDouble(Hadle_2,DOUBLE_VALUE); base_sell[count][2]=FileReadDouble(Hadle_2,DOUBLE_VALUE); base_sell[count][3]=FileReadDouble(Hadle_2,DOUBLE_VALUE); base_sell[count][4]=FileReadDouble(Hadle_2,DOUBLE_VALUE); base_sell[count][5]=FileReadDouble(Hadle_2,DOUBLE_VALUE); Print(base_sell[count][5]); count++; } numbers_of_vectors_sell=count; } FileClose(Hadle_1); FileClose(Hadle_2); return(0); } int deinit() { if(Base) { int Hadle_1=FileOpen("Buy_Position.dat",FILE_BIN|FILE_WRITE); int count; double ordinate_1,ordinate_2,ordinate_3,ordinate_4,ordinate_5; for(int i=OrdersHistoryTotal()-1;i>=0;i--) { OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); if(OrderType()==0) { if(OrderProfit()>=0) { count=iBarShift(Symbol(),Period(),OrderOpenTime()); count++; ordinate_1=iMA(Symbol(),Period(),89,0,0,5,count)/iMA(Symbol(),Period(),144,0,0,5,count); ordinate_2=iMA(Symbol(),Period(),144,0,0,5,count)/iMA(Symbol(),Period(),233,0,0,5,count); ordinate_3=iMA(Symbol(),Period(),21,0,0,5,count)/iMA(Symbol(),Period(),89,0,0,5,count); ordinate_4=iMA(Symbol(),Period(),55,0,0,5,count)/iMA(Symbol(),Period(),89,0,0,5,count); ordinate_5=iMA(Symbol(),Period(),2,0,0,5,count)/iMA(Symbol(),Period(),55,0,0,5,count); FileWriteDouble(Hadle_1,ordinate_1,DOUBLE_VALUE); FileWriteDouble(Hadle_1,ordinate_2,DOUBLE_VALUE); FileWriteDouble(Hadle_1,ordinate_3,DOUBLE_VALUE); FileWriteDouble(Hadle_1,ordinate_4,DOUBLE_VALUE); FileWriteDouble(Hadle_1,ordinate_5,DOUBLE_VALUE); FileWriteDouble(Hadle_1,1,DOUBLE_VALUE); } if(OrderProfit()<0) { count=iBarShift(Symbol(),Period(),OrderOpenTime()); count++; ordinate_1=iMA(Symbol(),Period(),89,0,0,5,count)/iMA(Symbol(),Period(),144,0,0,5,count); ordinate_2=iMA(Symbol(),Period(),144,0,0,5,count)/iMA(Symbol(),Period(),233,0,0,5,count); ordinate_3=iMA(Symbol(),Period(),21,0,0,5,count)/iMA(Symbol(),Period(),89,0,0,5,count); ordinate_4=iMA(Symbol(),Period(),55,0,0,5,count)/iMA(Symbol(),Period(),89,0,0,5,count); ordinate_5=iMA(Symbol(),Period(),2,0,0,5,count)/iMA(Symbol(),Period(),55,0,0,5,count); FileWriteDouble(Hadle_1,ordinate_1,DOUBLE_VALUE); FileWriteDouble(Hadle_1,ordinate_2,DOUBLE_VALUE); FileWriteDouble(Hadle_1,ordinate_3,DOUBLE_VALUE); FileWriteDouble(Hadle_1,ordinate_4,DOUBLE_VALUE); FileWriteDouble(Hadle_1,ordinate_5,DOUBLE_VALUE); FileWriteDouble(Hadle_1,0,DOUBLE_VALUE); } } } int Hadle_2=FileOpen("Sell_Position.dat",FILE_BIN|FILE_WRITE); for(i=OrdersHistoryTotal()-1;i>=0;i--) { OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); if(OrderType()==1) { if(OrderProfit()>=0) { count=iBarShift(Symbol(),Period(),OrderOpenTime()); count++; ordinate_1=iMA(Symbol(),Period(),89,0,0,5,count)/iMA(Symbol(),Period(),144,0,0,5,count); ordinate_2=iMA(Symbol(),Period(),144,0,0,5,count)/iMA(Symbol(),Period(),233,0,0,5,count); ordinate_3=iMA(Symbol(),Period(),21,0,0,5,count)/iMA(Symbol(),Period(),89,0,0,5,count); ordinate_4=iMA(Symbol(),Period(),55,0,0,5,count)/iMA(Symbol(),Period(),89,0,0,5,count); ordinate_5=iMA(Symbol(),Period(),2,0,0,5,count)/iMA(Symbol(),Period(),55,0,0,5,count); FileWriteDouble(Hadle_2,ordinate_1,DOUBLE_VALUE); FileWriteDouble(Hadle_2,ordinate_2,DOUBLE_VALUE); FileWriteDouble(Hadle_2,ordinate_3,DOUBLE_VALUE); FileWriteDouble(Hadle_2,ordinate_4,DOUBLE_VALUE); FileWriteDouble(Hadle_2,ordinate_5,DOUBLE_VALUE); FileWriteDouble(Hadle_2,1,DOUBLE_VALUE); } if(OrderProfit()<0) { count=iBarShift(Symbol(),Period(),OrderOpenTime()); count++; ordinate_1=iMA(Symbol(),Period(),89,0,0,5,count)/iMA(Symbol(),Period(),144,0,0,5,count); ordinate_2=iMA(Symbol(),Period(),144,0,0,5,count)/iMA(Symbol(),Period(),233,0,0,5,count); ordinate_3=iMA(Symbol(),Period(),21,0,0,5,count)/iMA(Symbol(),Period(),89,0,0,5,count); ordinate_4=iMA(Symbol(),Period(),55,0,0,5,count)/iMA(Symbol(),Period(),89,0,0,5,count); ordinate_5=iMA(Symbol(),Period(),2,0,0,5,count)/iMA(Symbol(),Period(),55,0,0,5,count); FileWriteDouble(Hadle_2,ordinate_1,DOUBLE_VALUE); FileWriteDouble(Hadle_2,ordinate_2,DOUBLE_VALUE); FileWriteDouble(Hadle_2,ordinate_3,DOUBLE_VALUE); FileWriteDouble(Hadle_2,ordinate_4,DOUBLE_VALUE); FileWriteDouble(Hadle_2,ordinate_5,DOUBLE_VALUE); FileWriteDouble(Hadle_2,0,DOUBLE_VALUE); } } } } return(0); } int start() { if(!isNewBar())return(0); double MACD_1=iMACD(Symbol(),Period(),fast,slow,9,PRICE_TYPICAL,0,1); double MACD_2=iMACD(Symbol(),Period(),fast,slow,9,PRICE_TYPICAL,0,2); double MACD_3=iMACD(Symbol(),Period(),fast,slow,9,PRICE_TYPICAL,0,3); double Prob_win; double veсtor[5]; if(Base) { if(MACD_3<=MACD_2 && MACD_2>MACD_1) { if(close_orders)Close_Orders_by_type(OP_BUY); OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask+sl*Point,Bid-tp*Point); } if(MACD_3>=MACD_2 && MACD_2<MACD_1) { if(close_orders)Close_Orders_by_type(OP_SELL); OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-sl*Point,Ask+tp*Point); } } if(!Base) { if(MACD_3<=MACD_2 && MACD_2>MACD_1) { if(close_orders)Close_All_Orders(); veсtor[0]=iMA(Symbol(),Period(),89,0,0,5,1)/iMA(Symbol(),Period(),144,0,0,5,1); veсtor[1]=iMA(Symbol(),Period(),144,0,0,5,1)/iMA(Symbol(),Period(),233,0,0,5,1); veсtor[2]=iMA(Symbol(),Period(),21,0,0,5,1)/iMA(Symbol(),Period(),89,0,0,5,1); veсtor[3]=iMA(Symbol(),Period(),55,0,0,5,1)/iMA(Symbol(),Period(),89,0,0,5,1); veсtor[4]=iMA(Symbol(),Period(),2,0,0,5,1)/iMA(Symbol(),Period(),55,0,0,5,1); Prob_win=Euclidean_Metric(base_sell,veсtor,numbers_of_vectors_sell); if(Prob_win>=sell_threshold)OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask+sl*Point,Bid-tp*Point); if(inverse_position_open_ && Prob_win<=invers_sell_threshold)OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-sl*Point,Ask+tp*Point); } if(MACD_3>=MACD_2 && MACD_2<MACD_1) { if(close_orders)Close_All_Orders(); veсtor[0]=iMA(Symbol(),Period(),89,0,0,5,1)/iMA(Symbol(),Period(),144,0,0,5,1); veсtor[1]=iMA(Symbol(),Period(),144,0,0,5,1)/iMA(Symbol(),Period(),233,0,0,5,1); veсtor[2]=iMA(Symbol(),Period(),21,0,0,5,1)/iMA(Symbol(),Period(),89,0,0,5,1); veсtor[3]=iMA(Symbol(),Period(),55,0,0,5,1)/iMA(Symbol(),Period(),89,0,0,5,1); veсtor[4]=iMA(Symbol(),Period(),2,0,0,5,1)/iMA(Symbol(),Period(),55,0,0,5,1); Prob_win=Euclidean_Metric(base_buy,veсtor,numbers_of_vectors_buy); if(Prob_win>=buy_threshold)OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-sl*Point,Ask+tp*Point); if(inverse_position_open_ && Prob_win<=invers_buy_threshold)OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask+sl*Point,Bid-tp*Point); } } return(0); } void Close_Orders_by_type(int type) { for(int num=OrdersTotal()-1;num>=0;num--) { OrderSelect(num,SELECT_BY_POS,MODE_TRADES); if(OrderType()==type) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,Gold); } } void Close_All_Orders() { for(int num=OrdersTotal()-1;num>=0;num--) { OrderSelect(num,SELECT_BY_POS,MODE_TRADES); if(OrderProfit()>0) OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),5,Gold); } } double Euclidean_Metric(double& X_Data_Base[][v_dim_x], double& Vector[v_dim_x],int num_v)// Build600后,必须传引用. { int i=0,i1=0,i3,i2,i4; double Metric[1]; double t,sum; ArrayResize(Metric,num_v); ArrayInitialize(Metric,0.0); for(i=0;i<num_v;i++) { for(i1=0;i1<v_dim_x-1;i1++)Metric[i]+=MathPow(X_Data_Base[i][i1]-Vector[i1],2); Metric[i]=MathSqrt(Metric[i]); } //sort by ASCEND Metric for(i3=0;i3<num_v-1;i3++) for(i2=i3+1;i2<num_v;i2++) if(Metric[i3]>Metric[i2]) { t=Metric[i3]; Metric[i3]=Metric[i2]; Metric[i2]=t; for(i4=0;i4<v_dim_x;i4++) { t=X_Data_Base[i3][i4]; X_Data_Base[i3][i4]=X_Data_Base[i2][i4]; X_Data_Base[i2][i4]=t; } } sum=0; for(i=0;i<Num_neighbour;i++) { sum+=X_Data_Base[i][5];//суммируем 0 и 1 ближайших соседей чтобы вывести итоговую вероятность выигрыша в этой сделке //Print(X_Data_Base[i][5]); } return(sum/Num_neighbour); } bool isNewBar() { static datetime BarTime; bool res=false; if (BarTime!=Time[0]) { BarTime=Time[0]; res=true; } return(res); }
MT4问题请到MQL4论坛提问,谢谢!
arrays passed by reference only
程序中有一条提示“ double Euclidean_Metric(double&X_Data_Base[][v_dim_x], double Vector[v_dim_x],int num_v)”
我的引用由问题。。。请高手指点一下,,!!!