Mon dernier né.
System BK Kumo + H.L. System.
Reste a affiné les réglages éventuellement pour des résultats plus efficaces.
System BK Kumo + H.L. System.
Reste a affiné les réglages éventuellement pour des résultats plus efficaces.
Code
//+------------------------------------------------------------------+
//| aRka3579 |
//+------------------------------------------------------------------+
//--- Inputs
input string IndicatorName="MyEA%_Scalper_KUMO_Bk";
enum ENUM_HOUR
{
h00=00, //00:00
h01=01, //01:00
h02=02, //02:00
h03=03, //03:00
h04=04, //04:00
h05=05, //05:00
h06=06, //06:00
h07=07, //07:00
h08=08, //08:00
h09=09, //08:00
h10=10, //10:00
h11=11, //11:00
h12=12, //12:00
h13=13, //13:00
h14=14, //14:00
h15=15, //15:00
h16=16, //16:00
h17=17, //17:00
h18=18, //18:00
h19=19, //19:00
h20=20, //20:00
h21=21, //21:00
h22=22, //22:00
h23=23, //23:00
};
extern bool POWER_ON = true;
extern bool EXIT_System_ON = false;
input int Magic = 1;
extern int ATR_Period = 17;
extern string MM = "|||||||||| MONEY MANAGEMENT Risk ||||||||||";
input double Lots = 0.1;
extern double Martingale_X = 2.0;
extern string BP = "|||||||||| BASKET Profit ||||||||||";
extern bool UseProfitToClose = true;
extern double ProfitToClose = 7.77;
extern bool UseLossToClose = false;
extern double LossToClose = 6.66;
extern bool AllSymbols = false;
extern bool PendingOrders = false;
extern string DC = "|||||||||| DONCHIAN ||||||||||";
extern int Bk = 11;
extern string KUMO = "|||||||||| ICHIMOKU ||||||||||";
extern int Tenkan = 9;
extern int Kijun = 26;
extern int Senkou = 52;
extern string SL = "|||||||||| STOP LOSS ||||||||||";
extern double SL_ATR = 2.7;
input string Buy_Com = __FILE__;
input string Sell_Com = __FILE__;
extern string TIME_setting = "|||||||||| TIME Settings ||||||||||";
extern bool UseTimer = false; // Use start & end times in Hours
input ENUM_HOUR StartHour = h13; // Start operation hour
input ENUM_HOUR EndHour = h15; // Last operation hour
extern string DAY_setting = "|||||||||| DAY Settings ||||||||||";
extern bool Monday = true;
extern bool Tuesday = true;
extern bool Wednesday = true;
extern bool Thursday = false;
extern bool Friday = true;
extern bool Sunday = false;
//+------------------------------------------------------------------+
datetime CurrentTime;
bool EAon(){
bool eaon = false;
if(POWER_ON) eaon = true;
return(eaon);}
double slb,tpb,sls,tps,pt;
double last_profit, last_lot;
int last_tip;
bool clear;
double pips2dbl, pips2point, pipValue, profit, profitnow;
bool DaytoTrade(){
bool daytotrade = false;
if(DayOfWeek() == 0 && Sunday) daytotrade = true;
if(DayOfWeek() == 1 && Monday) daytotrade = true;
if(DayOfWeek() == 2 && Tuesday) daytotrade = true;
if(DayOfWeek() == 3 && Wednesday) daytotrade = true;
if(DayOfWeek() == 4 && Thursday) daytotrade = true;
if(DayOfWeek() == 5 && Friday) daytotrade = true;
return(daytotrade);}
bool Exit(){
bool exit = false;
if(EXIT_System_ON) exit = true;
return(exit);}
//+------------------------------------------------------------------+
//| Check for close order conditions |
//+------------------------------------------------------------------+
void CheckForClose()
{
//--- go trading only for first tiks of new bar
if(Volume[0]>1) return;
double ssA = iIchimoku(NULL, 0,Tenkan,Kijun,Senkou, MODE_SENKOUSPANA,0);
double ssB = iIchimoku(NULL, 0,Tenkan,Kijun,Senkou, MODE_SENKOUSPANB,0);
//---
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=Magic || OrderSymbol()!=Symbol()) continue;
//--- check order type
if(OrderType()==OP_BUY)
{
if (Open[1]<ssA && Open[1]<ssB)
if (Exit() )
{
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
Print("OrderClose error ",GetLastError());
}
break;
}
if(OrderType()==OP_SELL)
{
if (Open[1]>ssA && Open[1]>ssB)
if (Exit() )
{
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
Print("OrderClose error ",GetLastError());
}
break;
}
}
}
//+------------------------------------------------------------------+
//| Calculate open positions |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0;
//---
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
//--- return orders volume
if(buys>0) return(buys);
else return(-sells);
}
//+------------------------------------------------------------------+
//| Check for open order conditions |
//+------------------------------------------------------------------+
void CheckForOpen()
{
// Martingale
double Lot = (AccountEquity() * Lots /1000);
if( OrdersTotal() == 0 && OrdersHistoryTotal() == 0) Lot = (AccountEquity() * Lots /1000);
else if( OrdersTotal() == 0&& OrdersHistoryTotal() > 0 ) last_history_profit();
if( last_profit < 0 ) Lot = Martingale_X*last_lot;
if( last_profit > 0 ) Lot = (AccountEquity() * Lots /1000);
string ls_01 = " Levier: " + AccountLeverage()
+ "\n"
+ "\n"
+ " Heure du Server: " + TimeToStr(TimeCurrent(), TIME_SECONDS)
+ "\n"
+ " Heure Locale: " + TimeToStr(TimeLocal(), TIME_SECONDS)
+ "\n";
string ls_02 = "-------------------------------------\n"+"\n";
int Spread;
Spread=SymbolInfoInteger(Symbol(),SYMBOL_SPREAD);
//--- Output values in three lines
string ls_03 = (StringFormat(" Spread = %d", Spread));
string ls_04 = "\n"
+ "\n";
string ls_05 = "-------------------------------------\n";
string profitstr = DoubleToStr(profitnow,2);
string ls_06 = "\n"
+ "\n";
string ls_07 = " Solde : " + AccountBalance()
+ "\n";
string ls_08 = " Equity : " + AccountEquity()
+ "\n";
string ls_09 = " Profits : " + AccountProfit()
+ "\n";
Comment( ls_01 + ls_02 + ls_03 + ls_04 + ls_05 + ls_06 + ls_07 + ls_08 + ls_09 );
//+--------
// Trading hours
if(UseTimer == true)
{
CurrentTime = TimeLocal();
int GetWeekday = TimeDayOfWeek(CurrentTime);
int GetHour = TimeHour(CurrentTime);
int GetMinute = TimeMinute(CurrentTime);
if(GetHour > StartHour && GetHour < EndHour && GetWeekday <6)
{
bool TradeAllowed = true;
}
else TradeAllowed = false;
}
else TradeAllowed = true;
int res;
//--- go trading only for first tiks of new bar
if(Volume[0]>1) return;
if(SL_ATR==0)slb=0;else slb=Close[0]-iATR(NULL,PERIOD_CURRENT,17,0)*SL_ATR;
if(SL_ATR==0)sls=0;else sls=Close[0]+iATR(NULL,PERIOD_CURRENT,17,0)*SL_ATR;
//--- get Moving Average
double ssA = iIchimoku(NULL, 0,Tenkan,Kijun,Senkou, MODE_SENKOUSPANA,0);
double ssB = iIchimoku(NULL, 0,Tenkan,Kijun,Senkou, MODE_SENKOUSPANB,0);
double rhigh = iHigh(Symbol(),Period(),iHighest(Symbol(), Period(), MODE_HIGH, Bk,1+1));
double rlow = iLow(Symbol(),Period(),iLowest(Symbol(), Period(), MODE_LOW, Bk, 1+1));
// Candle value
double CLOSE = iClose(Symbol(),0, 1);
double HIGH = iHigh(Symbol(),0, 1);
double LOW = iLow(Symbol(),0, 1);
//--- SELL conditions
if (Open[1]<ssA && Open[1]<ssB)
if((CLOSE < rlow && 1 > 0) || (LOW < rlow) && TradeAllowed == true)
if (EAon() )
if (DaytoTrade() )
{
res=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,sls,tps,Sell_Com,Magic,0,Red);
return;
}
//--- BUY conditions
if((CLOSE > rhigh && 1 > 0) || (HIGH > rhigh) && TradeAllowed == true)
if (Open[1]>ssA && Open[1]>ssB)
if (EAon() )
if (DaytoTrade() )
{
res=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,slb,tpb,Buy_Com,Magic,0,Blue);
return;
}
}
//+------------------------------------------------------------------+
//| OnTick function |
//+------------------------------------------------------------------+
void OnTick()
{
//--- check for history and trading
if(Bars<100 || IsTradeAllowed()==false)
return;
//--- calculate open orders by current symbol
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();
//--- Basket Profit/Lost
profit = ProfitCheck();
if(UseProfitToClose)
{
if(profit>(AccountBalance() * ProfitToClose/100))
{
if(AllSymbols)
{
if(PendingOrders)
if(!CloseDeleteAll())
clear=false;
if(!PendingOrders)
if(!CloseDeleteAllNonPending())
clear=false;
}
if(!AllSymbols)
{
if(PendingOrders)
if(!CloseDeleteAllCurrent())
clear=false;
if(!PendingOrders)
if(!CloseDeleteAllCurrentNonPending())
clear=false;
}
}
}
if(UseLossToClose)
{
if(profit<-(AccountBalance() * LossToClose/100))
{
if(AllSymbols)
{
if(PendingOrders)
if(!CloseDeleteAll())
clear=false;
if(!PendingOrders)
if(!CloseDeleteAllNonPending())
clear=false;
}
if(!AllSymbols)
{
if(PendingOrders)
if(!CloseDeleteAllCurrent())
clear=false;
if(!PendingOrders)
if(!CloseDeleteAllCurrentNonPending())
clear=false;
}
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
bool CloseDeleteAll()
{
int total = OrdersTotal();
for (int cnt = total-1 ; cnt >=0 ; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
{
switch(OrderType())
{
case OP_BUY :
{
if(!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),Blue))
return(false);
}break;
case OP_SELL :
{
if(!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),Red))
return(false);
}break;
}
if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP || OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT)
if(!OrderDelete(OrderTicket()))
{
Print("Error deleting " + OrderType() + " order : ",GetLastError());
return (false);
}
}
}
return (true);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
// delete all on current chart
bool CloseDeleteAllCurrent()
{
int total = OrdersTotal();
for (int cnt = total-1 ; cnt >=0 ; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
switch(OrderType())
{
case OP_BUY :
{
if(!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),Blue))
return(false);
}break;
case OP_SELL :
{
if(!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),Red))
return(false);
}break;
}
if(OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP || OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT)
if(!OrderDelete(OrderTicket()))
{
return (false);
}
}
}
}
return (true);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
// left pending orders
bool CloseDeleteAllNonPending()
{
int total = OrdersTotal();
for (int cnt = total-1 ; cnt >=0 ; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
{
switch(OrderType())
{
case OP_BUY :
{
if(!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),Blue))
return(false);
}break;
case OP_SELL :
{
if(!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),Red))
return(false);
}break;
}
}
}
return (true);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
// delete all on current chart left pending
bool CloseDeleteAllCurrentNonPending()
{
int total = OrdersTotal();
for (int cnt = total-1 ; cnt >=0 ; cnt--)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol())
{
switch(OrderType())
{
case OP_BUY :
{
if(!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),Blue))
return(false);
}break;
case OP_SELL :
{
if(!OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),Red))
return(false);
}break;
}
}
}
}
return (true);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
double ProfitCheck()
{
double profit=0;
int total = OrdersTotal();
for (int cnt = total-1 ; cnt >=0 ; cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(AllSymbols)
profit+=OrderProfit();
else if(OrderSymbol()==Symbol())
profit+=OrderProfit();
}
return(profit);
}
//+------------------------------------------------------------------+
// Martingale
//+------------------------------------------------------------------+
double last_history_profit()
{
double cpte_profit = 0; //int Magik_No = -1;
if( OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY) )
{
if( OrderMagicNumber() == Magic ) {
last_profit = OrderProfit();
last_lot = OrderLots();
last_tip = OrderType();
}
}
return(0);
}
//+------------------------------------------------------------------+
//| ATR |
//+------------------------------------------------------------------+
double ATR(string SYMBOL)
{
double ATR = iATR(SYMBOL,0,ATR_Period,1);
return(ATR);
}