Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
Stat_Euclidean_Metric (Modified)
//+------------------------------------------------------------------+
//| 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 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 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_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(),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("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(),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_BUY);
if((HiddenSLTP&&(OrderOpenPrice()-Ask)/Point>=tp)||(HiddenSLTP&&(Bid-OrderOpenPrice())/Point>=sl))Close_Orders_by_type(OP_SELL);
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);
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(MACD_3>=MACD_2 && MACD_2<MACD_1)
{
if(close_orders)Close_Orders_by_type(OP_SELL);
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(!Base)
{
if(MACD_3<=MACD_2 && MACD_2>MACD_1)
{
if(close_orders)Close_All_Orders();
veñtor[0]=iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,1);
veñtor[1]=iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod6,0,MAMethod,MAPrice,1);
veñtor[2]=iMA(Symbol(),Period(),MAPeriod2,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,1);
veñtor[3]=iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,1);
veñtor[4]=iMA(Symbol(),Period(),MAPeriod1,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,1);
Prob_win=Euclidean_Metric(base_sell,veñtor,numbers_of_vectors_sell);
if(Prob_win>=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);}
if(inverse_position_open_? && Prob_win<=invers_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(MACD_3>=MACD_2 && MACD_2<MACD_1)
{
if(close_orders)Close_All_Orders();
veñtor[0]=iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,1);
veñtor[1]=iMA(Symbol(),Period(),MAPeriod5,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod6,0,MAMethod,MAPrice,1);
veñtor[2]=iMA(Symbol(),Period(),MAPeriod2,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,1);
veñtor[3]=iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod4,0,MAMethod,MAPrice,1);
veñtor[4]=iMA(Symbol(),Period(),MAPeriod1,0,MAMethod,MAPrice,1)/iMA(Symbol(),Period(),MAPeriod3,0,MAMethod,MAPrice,1);
Prob_win=Euclidean_Metric(base_buy,veñtor,numbers_of_vectors_buy);
if(Prob_win>=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(inverse_position_open_? && Prob_win<=invers_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);}
}
}
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,m;
double Metric[1];
double t,sum;
ArrayResize(Metric,num_v);
ArrayInitialize(Metric,0.0);
for(int r=0;r<num_v;r++)
{
for(int r1=0;r1<v_dim_x-1;r1++)Metric[r]+=MathAbs(X_Data_Base[r][r1]-Vector[r1]);
}
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);
}
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---