Author: Copyright � 2009,Lexandros
Profit factor:
0.00
Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It automatically opens orders when conditions are reachedIt can change open orders parameters, due to possible stepping strategy
0 Views
0 Downloads
0 Favorites
ccfp_v3
//+------------------------------------------------------------------+
//|                                                      ccfp_v3.mq4 |
//|                                       Copyright © 2009,Lexandros |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009,Lexandros"
#property link      "lexandros@yandex.ru"
extern double step=0.0001;
extern double start_lot=0.01;
extern double min_lot=0.01;
extern bool MM=true;
extern int delta=500;
extern bool trail=true;
extern int trailing=30;
extern int stop=0;
extern int profit=0;
double ind [7,2],ind_old [7,2],lot[1];
int cnt,open,n,x,y;  
string day;
color clr;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----

   
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----



///////////Money Management
if (MM)
   {
   lot[0]=start_lot*MathFloor (AccountBalance()/delta);
   if (lot[0]<start_lot) lot[0]=start_lot;
   if (lot[0]>MarketInfo(Symbol(),MODE_MAXLOT)) lot[0]=MarketInfo(Symbol(),MODE_MAXLOT);
   }
   else lot[0]=start_lot; 
/////////////////////////////////////////////


//////////òðåéëèíã
if (trail) tral(trailing,min_lot);
//////////////////////

///////////////////Âûâîä èíôîðìàöèè
if (DayOfWeek( )==0) day="Âîñêðåñåíüå";
if (DayOfWeek( )==1) day="Ïîíåäåëüíèê";
if (DayOfWeek( )==2) day="Âòîðíèê";
if (DayOfWeek( )==3) day="Ñðåäà";
if (DayOfWeek( )==4) day="×åòâåðã";
if (DayOfWeek( )==5) day="Ïÿòíèöà";
if (DayOfWeek( )==6) day="Ñóááîòà";
string info=AccountCompany()+",  "+AccountName()+". Ñ÷åò ¹: "+AccountNumber()+", Âàëþòà ñ÷åòà:  "+AccountCurrency()+". Íà÷àëüíûé ëîò="+NormalizeDouble(start_lot,2)+". MM="+MM+". Äåëüòà="+delta;
if (AccountMargin()!=0) Comment (info,"\n",Hour(),":00. ",Day(),".",Month(),".",Year(),". ",day,"\n","Áàëëàíñ=",AccountBalance(),"\n","Ñðåäñòâà=",AccountEquity(),"\n","Ïðîñàäêà=",NormalizeDouble((AccountBalance()-AccountEquity())/AccountBalance(),2)*100,"%","\n","Lot=",lot[0],"\n","Îòêðûòûõ îðäåðîâ=",OrdersTotal(),"\n","Óðîâåíü ìàðæè=",AccountEquity()*100/AccountMargin(),"%");
else Comment (info,"\n",Hour(),":00. ",Day(),".",Month(),".",Year(),". ",day,"\n","Áàëëàíñ=",AccountBalance(),"\n","Ñðåäñòâà=",AccountEquity(),"\n","Ïðîñàäêà=",NormalizeDouble((AccountBalance()-AccountEquity())/AccountBalance(),2),"\n","Lot=",lot[0],"\n","Îòêðûòûõ îðäåðîâ=",OrdersTotal(),"\n","Óðîâåíü ìàðæè=0");
//////////////////////////////////////////


/////////////Çàïîëíåíèå ìàññèâà äàííûìè èíäèêàòîðà
for (cnt=0;cnt<7;cnt++)
   {
   ind [cnt,0]=iCustom(NULL,0,"CCFp",1,0,5,3,cnt,1);
   ind [cnt,1]=cnt+1;
   ind_old [cnt,0]=iCustom(NULL,0,"CCFp",1,0,5,3,cnt,2);
   ind_old [cnt,1]=cnt+1;
   }
////////////////////////////////////////


/////////////////Ïðîâåðêà ñèãíàëà
for (x=0;x<7;x++)
   {
   for (y=0;y<7;y++)
      {
      if (ind[x,1]==ind[y,1])continue;
      if (ind[x,0]-ind[y,0]>step&&ind_old[x,0]-ind_old[y,0]<=step) oper_up(ind[x,1],ind[y,1],lot[0],stop,profit);
      }
   }
//////////////////////////////////





//----
   return(0);
  }
//+------------------------------------------------------------------+

////////////////////Îòêðûòèå/çàêðûòèå îðäåðîâ///////////////////////
//Âõîäíûå äàííûå: top=íîìåð âàëþòû èäóùèåé ââåðõ, down=íîìåð âàëþòû èäóùåé âíèç,l=ëîò,s=ñòîïëîññ â ïóíêòàõ,p=ïðîôèò â ïóíêòàõ
void oper_up (int top,int down,double l,int s,int p)
{

string val;
int op,k,no_open;
string sym;
double price,st,pr;



 
   //USD
   if (top==1)
      {
      if (down==2){ sym="EURUSD"; op=OP_BUY;}
      if (down==3){ sym="GBPUSD"; op=OP_BUY;}
      if (down==4){ sym="USDCHF"; op=OP_SELL;}
      if (down==5){ sym="USDJPY"; op=OP_SELL;}
      if (down==6){ sym="AUDUSD"; op=OP_BUY;}
      if (down==7){ sym="USDCAD"; op=OP_SELL;}
      }
   
   
   //EUR
   if (top==2)
      {
      if (down==1){ sym="EURUSD"; op=OP_SELL; }
      if (down==3){ sym="EURGBP"; op=OP_SELL; }
      if (down==4){ sym="EURCHF"; op=OP_SELL; }
      if (down==5){ sym="EURJPY"; op=OP_SELL; }
      if (down==6){ sym="EURAUD"; op=OP_SELL; }
      if (down==7){ sym="EURCAD"; op=OP_SELL; }
//**************************      
      }
   //GBP
   if (top==3)
      {
      if (down==1){ sym="GBPUSD"; op=OP_SELL;}
      if (down==2){ sym="EURGBP"; op=OP_BUY; }
      if (down==4){ sym="GBPCHF"; op=OP_SELL;}
      if (down==5){ sym="GBPJPY"; op=OP_SELL;}
      if (down==6){ sym="GBPAUD"; op=OP_SELL;}
      if (down==7){ sym="GBPCAD"; op=OP_SELL;}      
      }
      
   //CHF
   if (top==4)
      {
      if (down==1){ sym="USDCHF"; op=OP_BUY;}
      if (down==2){ sym="EURCHF"; op=OP_BUY;}
      if (down==3){ sym="GBPCHF"; op=OP_BUY;}
      if (down==5){ sym="CHFJPY"; op=OP_SELL;}
      if (down==6){ sym="AUDCHF"; op=OP_BUY; }
      if (down==7){ sym="CADCHF"; op=OP_BUY;}
//*****************      
      }   
//JPY
   if (top==5)
      {
      if (down==1){ sym="USDJPY"; op=OP_BUY;}
      if (down==2){ sym="EURJPY"; op=OP_BUY;}
      if (down==3){ sym="GBPJPY"; op=OP_BUY;}
      if (down==4){ sym="CHFJPY"; op=OP_BUY;}
      if (down==6){ sym="AUDJPY"; op=OP_BUY;}
      if (down==7){ sym="CADJPY"; op=OP_BUY;}
      }

   //AUD
   if (top==6)
      {
      if (down==1){ sym="AUDUSD"; op=OP_SELL;}
      if (down==2){ sym="EURAUD"; op=OP_BUY; }
      if (down==3){ sym="GBPAUD"; op=OP_BUY; }
      if (down==4){ sym="AUDCHF"; op=OP_SELL;}
      if (down==5){ sym="AUDJPY"; op=OP_SELL;}
      if (down==7){ sym="AUDCAD"; op=OP_SELL;}
//***********************      
      }
      
//CAD
   if (top==7)
      {
      if (down==1){ sym="USDCAD"; op=OP_BUY;}
      if (down==2){ sym="EURCAD"; op=OP_BUY;}
      if (down==3){ sym="GBPCAD"; op=OP_BUY;}
      if (down==4){ sym="CADCHF"; op=OP_SELL;}
      if (down==5){ sym="CADJPY"; op=OP_SELL;}
      if (down==6){ sym="AUDCAD"; op=OP_BUY;}
//**************************      
      }
      




//////////////Çàêðûâàåì îòêðûòûå îðäåðà
no_open=0;
for (k=0;k<OrdersTotal();k++)
   {

   OrderSelect(k,SELECT_BY_POS);
   if (OrderSymbol()==sym&&OrderType()!=op)
      {
      if (OrderType()==OP_BUY) {Print("Çàêðûâàåì ",OrderSymbol()," ",OrderType()); OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),10000);}
      if (OrderType()==OP_SELL) {Print("Çàêðûâàåì ",OrderSymbol()," ",OrderType()); OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),10000);}
      }
   if (OrderSymbol()==sym&&OrderType()==op) no_open=1;
   }

///

///Îòêðûâàåì îðäåðà
if (op==0) {price=MarketInfo(sym,MODE_ASK); st=price-s*MarketInfo(OrderSymbol(),MODE_POINT);pr=price+p*MarketInfo(OrderSymbol(),MODE_POINT);}
if (op==1) {price=MarketInfo(sym,MODE_BID); st=price+s*MarketInfo(OrderSymbol(),MODE_POINT);pr=price-p*MarketInfo(OrderSymbol(),MODE_POINT);}
if (s<=0) st=0; 
if (p<=0) pr=0;
if (no_open==0) {Print ("Îòêðûâàåì ",sym," ",op); OrderSend(sym,op,l,price,1000,st,pr,"",130571);}

}

///////////////////////////////////////////////////



////////////////Òðåéëèíã (tr=óðîâåíü òðåéëèíãà â ïóíêòàõ, ml=ìèíèìàëüíûé ëîò)
void tral (int tr,double ml)
{
int cnt;
int k;
int x;
datetime last_time;
double close_lot;
for (cnt=0;cnt<OrdersTotal();cnt++)
   {
   OrderSelect(cnt,SELECT_BY_POS);
   close_lot=NormalizeDouble(OrderLots()/2,2);
   if (close_lot<ml) close_lot=ml;
   if (OrderType()==OP_BUY)
      {
      if (OrderStopLoss()==0)
         {
         if (MarketInfo(OrderSymbol(),MODE_BID)-OrderOpenPrice()>=tr*MarketInfo(OrderSymbol(),MODE_POINT))
            {
            Print("Äâèãàåì ñòîï è çàêðûâàåì ïîëîâèíó ",OrderTicket()," ", OrderSymbol()," ",OrderType());
            OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID)-tr*MarketInfo(OrderSymbol(),MODE_POINT),MarketInfo(OrderSymbol(),MODE_DIGITS)),0,0);
            OrderClose (OrderTicket(),close_lot,MarketInfo(OrderSymbol(),MODE_BID),10000);
            }
         }
      else
         {
         if (MarketInfo(OrderSymbol(),MODE_BID)-OrderStopLoss()>=tr*MarketInfo(OrderSymbol(),MODE_POINT)*2)
            {
            Print("Äâèãàåì ñòîï è çàêðûâàåì ïîëîâèíó ",OrderTicket()," ", OrderSymbol()," ",OrderType());
            OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID)-tr*MarketInfo(OrderSymbol(),MODE_POINT),MarketInfo(OrderSymbol(),MODE_DIGITS)),0,0);
            OrderClose (OrderTicket(),close_lot,MarketInfo(OrderSymbol(),MODE_BID),10000);
            }
         }
      }
   if (OrderType()==OP_SELL)
      {
      if (OrderStopLoss()==0)
         {
         if (OrderOpenPrice()-MarketInfo(OrderSymbol(),MODE_ASK)>=tr*MarketInfo(OrderSymbol(),MODE_POINT))
            {
            Print("Äâèãàåì ñòîï è çàêðûâàåì ïîëîâèíó ",OrderTicket()," ", OrderSymbol()," ",OrderType());
            OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK)+tr*MarketInfo(OrderSymbol(),MODE_POINT),MarketInfo(OrderSymbol(),MODE_DIGITS)),0,0);
            OrderClose (OrderTicket(),close_lot,MarketInfo(OrderSymbol(),MODE_ASK),10000);
            }
         }
      else
         {
         if (OrderStopLoss()-MarketInfo(OrderSymbol(),MODE_ASK)>=tr*MarketInfo(OrderSymbol(),MODE_POINT)*2)
            {
            Print("Äâèãàåì ñòîï è çàêðûâàåì ïîëîâèíó ",OrderTicket()," ", OrderSymbol()," ",OrderType());
            OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_ASK)+tr*MarketInfo(OrderSymbol(),MODE_POINT),MarketInfo(OrderSymbol(),MODE_DIGITS)),0,0);
            OrderClose (OrderTicket(),close_lot,MarketInfo(OrderSymbol(),MODE_ASK),10000);
            }
         }
      }
   
   
   } 
}      
      
         
///////////////////////////////////////////////////        

Comments