Author: Copyright � 2009,Lexandros
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_cc_v1
//+------------------------------------------------------------------+
//|                                                      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 int magicnumber=12345;
extern bool MM=true;
extern int delta=100;
extern bool close=true;
extern bool trail=true;
extern int trailing=15;
extern int stop=0;
extern int profit=0;
double ccfp [7,2],ccfp_old [7,2],cc [7,2],cc_old [7,2],lot[1];
int cnt,n,x,y;  
string day;
color clr;
bool open;
//+------------------------------------------------------------------+
//| 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,magicnumber);
//////////////////////

///////////////////Âûâîä èíôîðìàöèè
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()+". Íà÷àëüíûé ëîò="+DoubleToStr(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");
//////////////////////////////////////////


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


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



/////////////////Ïðîâåðêà ñèãíàëà
for (x=0;x<7;x++)
   {
   for (y=0;y<7;y++)
      {
      if (ccfp[x,1]==ccfp[y,1])continue;
      if (ccfp[x,0]-ccfp[y,0]>step&&ccfp_old[x,0]-ccfp_old[y,0]<=step&&ccfp[x,0]>ccfp_old[x,0]&&ccfp[y,0]<ccfp_old[y,0]&&cc[x,0]-cc[y,0]>step&&cc[x,0]>cc_old[x,0]&&cc[y,0]<cc_old[y,0]) {open=true; oper_up(ccfp[x,1],ccfp[y,1],lot[0],stop,profit,close,open,magicnumber);}
      if (cc[x,0]-cc[y,0]>step&&cc_old[x,0]-cc_old[y,0]<=step&&cc[x,0]>cc_old[x,0]&&cc[y,0]<cc_old[y,0]&&ccfp[x,0]-ccfp[y,0]>step&&ccfp[x,0]>ccfp_old[x,0]&&ccfp[y,0]<ccfp_old[y,0]) {open=true;oper_up(cc[x,1],cc[y,1],lot[0],stop,profit,close,open,magicnumber);}
      if (ccfp[x,0]-ccfp[y,0]>step&&ccfp_old[x,0]-ccfp_old[y,0]<=step) {open=false; oper_up(ccfp[x,1],ccfp[y,1],lot[0],stop,profit,close,open,magicnumber);}
      if (cc[x,0]-cc[y,0]>step&&cc_old[x,0]-cc_old[y,0]<=step) {open=false;oper_up(cc[x,1],cc[y,1],lot[0],stop,profit,close,open,magicnumber);}
      }
   }
//////////////////////////////////





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

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

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



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

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




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

   OrderSelect(k,SELECT_BY_POS);
   if (OrderSymbol()==sym&&OrderType()!=op&&OrderMagicNumber()==mn&&cl)
      {
      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&&OrderMagicNumber()==mn) no_open=1;
   }

///

///Îòêðûâàåì îðäåðà
if (ops)
   {
   if (op==0) {price=MarketInfo(sym,MODE_ASK); st=price-s*MarketInfo(sym,MODE_POINT);pr=price+p*MarketInfo(sym,MODE_POINT);}
   if (op==1) {price=MarketInfo(sym,MODE_BID); st=price+s*MarketInfo(sym,MODE_POINT);pr=price-p*MarketInfo(sym,MODE_POINT);}
   if (s<=0) st=0; else if (s<=MarketInfo(sym,MODE_STOPLEVEL)) {Print("Ñòîï-ëîññ ïî èíñòðóìåíòó ",sym," ìåíüøå ðàçðåøåííîãî ÄÖ!!!");no_open=1;}
   if (p<=0) pr=0; else if (p<=MarketInfo(sym,MODE_STOPLEVEL)) {Print("Òåéê-ïðîôèò ïî èíñòðóìåíòó ",sym," ìåíüøå ðàçðåøåííîãî ÄÖ!!!");no_open=1;}
   if (MarketInfo(sym,MODE_TRADEALLOWED)!=1) {Print ("Òîðãîâëÿ ïî èíñòðóìåíòó ",sym," çàïðåùåíà ÄÖ!!!");no_open=1;}
   if (no_open==0) {Print ("Îòêðûâàåì ",sym," ",op); OrderSend(sym,op,l,price,10000,st,pr,"",mn);}
   }

}

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



////////////////Òðåéëèíã (tr=óðîâåíü òðåéëèíãà â ïóíêòàõ, ml=ìèíèìàëüíûé ëîò)
void tral (int tr,double ml,int mn)
{
int cnt;
int k;
int x;
datetime last_time;
double close_lot;
for (cnt=0;cnt<OrdersTotal();cnt++)
   {
   OrderSelect(cnt,SELECT_BY_POS);
   if (OrderMagicNumber()!=mn) continue;
   close_lot=NormalizeDouble(OrderLots()/2,2);
   if (close_lot<ml) close_lot=ml;
   if (OrderType()==OP_BUY)
      {
      if (OrderStopLoss()==0||OrderStopLoss()<OrderOpenPrice())
         {
         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||OrderStopLoss()>OrderOpenPrice())
         {
         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

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 ---