My_ishimoky

0 Views
0 Downloads
0 Favorites
My_ishimoky

#define MIN_STOPLOSS_POINT 10
#define MIN_TAKEPROFIT_POINT 10 
#define MAGIC 781702

extern string sNameExpert = "Ichimoku";
extern int nAccount =0;
extern double dBuyStopLossPoint = 100;
extern double dSellStopLossPoint = 100;
extern double dBuyTakeProfitPoint = 100;
extern double dSellTakeProfitPoint = 100;
extern double dBuyTrailingStopPoint = 15;
extern double dSellTrailingStopPoint = 15;
extern double dLots = 0.10; 
extern int nSlippage = 5;
extern bool lFlagUseHourTrade = False;
extern int nFromHourTrade = 0;
extern int nToHourTrade = 23;
extern bool lFlagUseSound = True;
extern string sSoundFileName = "alert.wav";
extern color colorOpenBuy = Blue;
extern color colorCloseBuy = Aqua;
extern color colorOpenSell = Red;
extern color colorCloseSell = Aqua;


void deinit() {
   Comment("");
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start(){
   if (lFlagUseHourTrade){
      if (!(Hour()>=nFromHourTrade && Hour()<=nToHourTrade)) {
         Comment("Time for trade has not come else!");
         return(0);
      }
   }
   
   if(Bars < 100){
      Print("bars less than 100");
      return(0);
   }
   
   if (nAccount > 0 && nAccount != AccountNumber()){
      Comment("Trade on account :"+AccountNumber()+" FORBIDDEN!");
      return(0);
   }
   
   if((dBuyStopLossPoint > 0 && dBuyStopLossPoint < MIN_STOPLOSS_POINT) ||
      (dSellStopLossPoint > 0 && dSellStopLossPoint < MIN_STOPLOSS_POINT)){
      Print("StopLoss less than " + MIN_STOPLOSS_POINT);
      return(0);
   }
   if((dBuyTakeProfitPoint > 0 && dBuyTakeProfitPoint < MIN_TAKEPROFIT_POINT) ||
      (dSellTakeProfitPoint > 0 && dSellTakeProfitPoint < MIN_TAKEPROFIT_POINT)){
      Print("TakeProfit less than " + MIN_TAKEPROFIT_POINT);
      return(0);
   }

   double diCustom0=iCustom(NULL, 1440, "Ichimoku", 9, 26, 52, 0, 1);
double diCustom1=iCustom(NULL, 1440, "Ichimoku", 9, 26, 52, 1, 0);
double diCustom2=iCustom(NULL, 1440, "Ichimoku", 9, 26, 52, 0, 0);
double diCustom3=iCustom(NULL, 1440, "Ichimoku", 9, 26, 52, 1, 0);
double diClose4=iClose(NULL,1440,0);
double diCustom5=iCustom(NULL, 1440, "Ichimoku", 9, 26, 52, 2, 0);
double diClose6=iClose(NULL,1440,0);
double diCustom7=iCustom(NULL, 1440, "Ichimoku", 9, 26, 52, 3, 0);
double diCustom8=iCustom(NULL, 1440, "Ichimoku", 9, 26, 52, 0, 1);
double diCustom9=iCustom(NULL, 1440, "Ichimoku", 9, 26, 52, 1, 0);
double diCustom10=iCustom(NULL, 1440, "Ichimoku", 9, 26, 52, 0, 0);
double diCustom11=iCustom(NULL, 1440, "Ichimoku", 9, 26, 52, 1, 0);
double diClose12=iClose(NULL,1440,0);
double diCustom13=iCustom(NULL, 1440, "Ichimoku", 9, 26, 52, 2, 0);
double diClose14=iClose(NULL,1440,0);
double diCustom15=iCustom(NULL, 1440, "Ichimoku", 9, 26, 52, 3, 0);


   if(AccountFreeMargin() < (1000*dLots)){
      Print("We have no money. Free Margin = " + AccountFreeMargin());
      return(0);
   }
   
   bool lFlagBuyOpen = false, lFlagSellOpen = false, lFlagBuyClose = false, lFlagSellClose = false;
   
   lFlagBuyOpen = (diCustom0<diCustom1 && diCustom2>=diCustom3 && diClose4>diCustom5 && diClose6>diCustom7 && CheckExists(OP_BUY));
   lFlagSellOpen = (diCustom8>diCustom9 && diCustom10<=diCustom11 && diClose12<diCustom13 && diClose14<diCustom15 && CheckExists(OP_SELL));
   lFlagBuyClose = False;
   lFlagSellClose = False;
   
   if (!ExistPositions()){

      if (lFlagBuyOpen){
         OpenBuy();
         return(0);
      }

      if (lFlagSellOpen){
         OpenSell();
         return(0);
      }
   }
   if (ExistPositions()){
      if(OrderType()==OP_BUY){
         if (lFlagBuyClose){
            bool flagCloseBuy = OrderClose(OrderTicket(), OrderLots(), Bid, nSlippage, colorCloseBuy); 
            if (flagCloseBuy && lFlagUseSound) 
               PlaySound(sSoundFileName); 
            return(0);
         }
      }
      if(OrderType()==OP_SELL){
         if (lFlagSellClose){
            bool flagCloseSell = OrderClose(OrderTicket(), OrderLots(), Ask, nSlippage, colorCloseSell); 
            if (flagCloseSell && lFlagUseSound) 
               PlaySound(sSoundFileName); 
            return(0);
         }
      }
   }
   
   if (dBuyTrailingStopPoint > 0 || dSellTrailingStopPoint > 0){
      
      for (int i=0; i<OrdersTotal(); i++) { 
         if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { 
            bool lMagic = true;
            if (MAGIC > 0 && OrderMagicNumber() != MAGIC)
               lMagic = false;
            
            if (OrderSymbol()==Symbol() && lMagic) { 
               if (OrderType()==OP_BUY && dBuyTrailingStopPoint > 0) { 
                  if (Bid-OrderOpenPrice() > dBuyTrailingStopPoint*Point) { 
                     if (OrderStopLoss()<Bid-dBuyTrailingStopPoint*Point) 
                        ModifyStopLoss(Bid-dBuyTrailingStopPoint*Point); 
                  } 
               } 
               if (OrderType()==OP_SELL) { 
                  if (OrderOpenPrice()-Ask>dSellTrailingStopPoint*Point) { 
                     if (OrderStopLoss()>Ask+dSellTrailingStopPoint*Point || OrderStopLoss()==0)  
                        ModifyStopLoss(Ask+dSellTrailingStopPoint*Point); 
                  } 
               } 
            } 
         } 
      } 
   }
   return (0);
}

bool ExistPositions() {
	for (int i=0; i<OrdersTotal(); i++) {
		if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         bool lMagic = true;
         
         if (MAGIC > 0 && OrderMagicNumber() != MAGIC)
            lMagic = false;

			if (OrderSymbol()==Symbol() && lMagic) {
				return(True);
			}
		} 
	} 
	return(false);
}

//Ïîñìîòðèì íå îòêðûâàëèñü ëè ïîçû íà òåêóùåì áàðå                                    
bool CheckExists(int Type)                                  
 {
  bool Result = True;
  for(int i = 0; i < OrdersTotal(); i++)
   if(OrderSelect(i, SELECT_BY_POS))
    if(OrderType() == Type && OrderMagicNumber() == MAGIC && OrderSymbol() == Symbol())
     if(OrderOpenTime() >= Time[0])
      Result = False;
  for(i = 0; i < OrdersHistoryTotal(); i++)
   {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
     if(OrderType() == Type && OrderOpenTime() >= Time[0]
        && OrderMagicNumber() == MAGIC && OrderSymbol() == Symbol())
      Result = False;
    }

  return(Result);
  }

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

void ModifyStopLoss(double ldStopLoss) { 
   bool lFlagModify = OrderModify(OrderTicket(), OrderOpenPrice(), ldStopLoss, OrderTakeProfit(), 0, CLR_NONE); 
   if (lFlagModify && lFlagUseSound) 
      PlaySound(sSoundFileName); 
} 

void OpenBuy() { 
   double dStopLoss = 0, dTakeProfit = 0;

   if (dBuyStopLossPoint > 0)
      dStopLoss = Bid-dBuyStopLossPoint*Point;
   
   if (dBuyTakeProfitPoint > 0)
     dTakeProfit = Bid + dBuyTakeProfitPoint * Point; 
   
   int numorder = OrderSend(Symbol(), OP_BUY, dLots, Ask, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenBuy); 
   
   if (numorder > -1 && lFlagUseSound) 
      PlaySound(sSoundFileName);
} 

void OpenSell() { 
   double dStopLoss = 0, dTakeProfit = 0;
   
   if (dSellStopLossPoint > 0)
      dStopLoss = Ask+dSellStopLossPoint*Point;
   
   if (dSellTakeProfitPoint > 0)
      dTakeProfit = Ask-dSellTakeProfitPoint*Point;
   
   int numorder = OrderSend(Symbol(),OP_SELL, dLots, Bid, nSlippage, dStopLoss, dTakeProfit, sNameExpert, MAGIC, 0, colorOpenSell); 
   
   if (numorder > -1 && lFlagUseSound) 
      PlaySound(sSoundFileName); 
} 

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