Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
Stat_Euclidean_Metric
//+------------------------------------------------------------------+
//| 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 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);//Îáðàòèòü âíèìàíèå ÷òî çäåñü âåêòîð ïîìå÷åí êàê 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(),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);//Îáðàòèòü âíèìàíèå ÷òî çäåñü âåêòîð ïîìå÷åí êàê 0, à âûøå êàê 1
}
}
}
}
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)
{
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);
}
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
---