Stat_Euclidean_Metric

Author: StatBars TO
Orders Execution
Checks for the total of closed ordersIt automatically opens orders when conditions are reachedChecks for the total of open ordersIt Closes Orders by itself
Indicators Used
Moving average indicatorMACD Histogram
Miscellaneous
Uses files from the file systemIt reads information from a fileIt writes information to file
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 supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---