ccfp_cc_v2_0

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_v2_0
//+------------------------------------------------------------------+
//|                                                   ccfp_ññ_v2.mq4 |
//|                                       Copyright © 2009,Lexandros |
//|                                                                  |
//+------------------------------------------------------------------+
// Ìîäèôèêàöèÿ : © 2010,GENRO
// v2.0 - ââåäåíà çàäåðæêà íà÷àëà ðàáîòû â ìèíóòàõ
//      - ââåäåíà ïðîâåðêà íà ìàêñèìàëüíî-äîïóñòèìûé ñïðýä äëÿ îòêðûòèÿ ïîçèöèé
//      - ââåäåíà âîçìîæíîñòü çàäàâàòü ìàêñèìàëüíîå ïðîñêàëüçûâàíèå â ïóíêòàõ
//      
#property copyright "Copyright © 2009,Lexandros"
#property link      "lexandros@yandex.ru"
extern double step=0.0001;//âåëè÷èíà, íà êîòîðóþ äîëæíû ðàçîéòèñü ëèíèè âàëþò íà èíäþêå, äëÿ ïîÿâëåíèÿ ñèãíàëà;
extern double start_lot=0.01;//ñòàðòîâûé ëîò äëÿ ðàñ÷åòà MM, èëè åñëè MM îòêëþ÷åí - ïîñòîÿííûé ëîò
extern double min_lot=0.01;//ìèíèìàëüíûé ëîò ðàçðåøåííûé ÄÖ;
extern int SleepMinsAtStartup = 1;// çàäåðæêà íà÷àëà ðàáîòû â ìèíóòàõ
extern int magicnumber=12345;
extern bool MM=true;// âêë/îòêë MM
extern int delta=100;//âåëè÷èíà íà êîòîðóþ äîëæåí óâåëè÷èòñÿ/óìåíüøèòñÿ áàëàíñ äëÿ èçìåíåíèÿ ðàçìåðà ëîòà, ïðè âêëþ÷åííîì MM
extern bool close=true;//âêë/îòêë çàêðûòèÿ ïîçèöèÿ ïðè ïîÿâëåíèè ïðîòèâîñèãíàëà
extern bool trail=true;//
extern int trailing=15;//óðîâåíü òðåéëèíãà â ïóíêòàõ
extern int stop=0;
extern int profit=0;
extern int TradeSpread = 6; //ìàêñèìàëüíûé ñïðýä, ïðè êîòîðîì îòêðûâàþòñÿ ïîçèöèè
extern int slippage = 100;//  Çíà÷åíèå ìàêñèìàëüíîãî ïðîñêàëüçûâàíèÿ â ïóíêòàõ.
double ccfp [7,2],ccfp_old [7,2],cc [7,2],cc_old [7,2],lot[1];
int cnt,n,x,y;  
string day;
string g_str;
color clr;
bool open;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   g_str= StringConcatenate("Çàäåðæêà ", SleepMinsAtStartup, " ìèí äî íà÷àëà ðàáîòû ñîâåòíèêà",   "\n");
   Comment(g_str);
   Sleep(1000 * (60 * SleepMinsAtStartup)); 
   //Ôóíêöèÿ çàäåðæèâàåò âûïîëíåíèå òåêóùåãî ýêñïåðòà èëè ñêðèïòà íà îïðåäåëåííûé èíòåðâàë. ôóíêöèþ âñòðîåíà ïðîâåðêà ñîñòîÿíèÿ ôëàãà îñòàíîâêè ýêñïåðòà êàæäóþ 0.1 ñåêóíäû.
   
   
//----
   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()+", Ïëå÷î: "+AccountLeverage()+"    Íà÷àëüíûé ëîò="+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),slippage);}
      if (OrderType()==OP_SELL) {Print("Çàêðûâàåì ",OrderSymbol()," ",OrderType()); OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),slippage);}
      }
   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 (MarketInfo(sym,MODE_SPREAD)>TradeSpread) {Print ("Òîðãîâëÿ ïî èíñòðóìåíòó ",sym," çàïðåùåíà èç-çà áîëüøîãî ñïðýäà!!!");no_open=1;}
   
   if (no_open==0) {Print ("Îòêðûâàåì ",sym," ",op); OrderSend(sym,op,l,price,slippage,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),slippage);
            }
         }
      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),slippage);
            }
         }
      }
   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),slippage);
            }
         }
      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),slippage);
            }
         }
      }
   
   
   } 
}      
      
         
///////////////////////////////////////////////////        

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