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