IN_GOD_WE_TRUST_6w

Author: Copyright � 2010, IN GOD WE TRUST
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
Indicators Used
Moving average indicatorStandard Deviation indicator
0 Views
0 Downloads
0 Favorites
IN_GOD_WE_TRUST_6w
//+------------------------------------------------------------------+
//|                                              IN GOD WE TRUST.mq4 |
//|                                Copyright © 2010, IN GOD WE TRUST |
//|                                                  IN GOD WE TRUST |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, IN GOD WE TRUST"
   
/*-------------------------------------------------------------------- v1.4

/*--------------------------------------------------------------------

//--------------------------------------------------------------------v1.8


*///--------------------------------------------------------------------
extern int     Period_MA            = 2000,
               Dev                  = 2,
               MetodMA              = 2,  //MODE_SMA 0 Ïðîñòîå ñêîëüçÿùåå ñðåäíåå 
                                          //MODE_EMA 1 Ýêñïîíåíöèàëüíîå ñêîëüçÿùåå ñðåäíåå 
                                          //MODE_SMMA 2 Ñãëàæåííîå ñêîëüçÿùåå ñðåäíåå 
                                          //MODE_LWMA 3 Ëèíåéíî-âçâåøåííîå ñêîëüçÿùåå ñðåäíåå 

               TipPice              = 6,  //PRICE_CLOSE 0 Öåíà çàêðûòèÿ 
                                          //PRICE_OPEN 1 Öåíà îòêðûòèÿ 
                                          //PRICE_HIGH 2 Ìàêñèìàëüíàÿ öåíà 
                                          //PRICE_LOW 3 Ìèíèìàëüíàÿ öåíà 
                                          //PRICE_MEDIAN 4 Ñðåäíÿÿ öåíà, (high+low)/2 
                                          //PRICE_TYPICAL 5 Òèïè÷íàÿ öåíà, (high+low+close)/3 
                                          //PRICE_WEIGHTED 6 Âçâåøåííàÿ öåíà çàêðûòèÿ, (high+low+close+close)/4 
               No_Loss              = 7,     //ïåðåâîä â áåçóáûòîê
               TrailingStop         = 12,     //òðàëë        
               Shift                = 0,     //ñäâèã 
               Profit               = 0,     //Ïðîôèò äëÿ çàêðûòèÿ îðäåðà
               N_Orders             = 1,     //êîë-âî îäíîâðåìåííî îòêðûòûõ îðäåðîâ â îäíîì íàïðàâëåíèè
               N_Orders_Bar         = 1,     //êîëè÷åñòâî ñäåëîê = îò 0, ïðèõîäÿùèõñÿ íà 1 áàð
               DeltaStart           = 3,
               slippage             = 0,
               stoploss             = 0,     //óðîâåíü SL, åñëè 0, òî íå âûñòàâëÿåòñÿ
               takeprofit           = 0;     //óðîâåíü TP, åñëè 0, òî íå âûñòàâëÿåòñÿ
extern double  Lot                  = 0.1;
extern int     Magic                = 777;   //óíèêàëüíûé íîìåð îðäåðîâ ýòîãî ñîâåòíèêà
extern bool    DrawVisualization    = true;  //âûâîäèòü èëè íåò íà ýêðàí èíôîðìàöèþ
extern bool    BuySell              = true;  //ïðè ïîÿâëåíèè ëþáîãî ñèãíàëà buy èëè Sell, ñòàâèì îáà îðäåðà è Buy è Sell
extern bool    Buy                  = true;  //ââåðõ îò áîëèíæåðà ñòàâèì òîëüêî buy
extern bool    Sell                 = true;  //âíèç îò áîëèíæåðà ñòàâèì òîëüêî Sell

datetime TimeBar;
int OrdersBar;
//--------------------------------------------------------------------
int init()
  {

   if (DrawVisualization){
   ObjectCreate("balans", OBJ_LABEL, 0, 0, 0);
   ObjectSet("balans", OBJPROP_CORNER, 1);      
   ObjectSet("balans", OBJPROP_XDISTANCE, 10 ); 
   ObjectSet("balans", OBJPROP_YDISTANCE, 15);}
   return(0);
  }
//--------------------------------------------------------------------
int start()
{
   if (TrailingStop!=0) TrailingStop(0,TrailingStop);
   if (No_Loss!=0)      TrailingStop(1,No_Loss);
   string Name;
   //-----------------------------------------------------------------------
   if (DrawVisualization){ //Âûâîäèì çíà÷åíèå áàëàíñà è ñâîáîäíûõ ñðåäñòâ íà ýêðàí
   ObjectSetText("balans","ÁÀËÀÍÑ = "+DoubleToStr(AccountBalance(),2)+
                 " |ñâîá "+DoubleToStr(AccountFreeMargin(),2),8,"Arial",Snow);}
   //----------------------------------------------------------------- äíåâíîé ôèëüòð
   double MA     = iMA(NULL,0,Period_MA,0,MetodMA,TipPice,Shift);
   double StdDev = iStdDev(NULL,0,Period_MA,0,MetodMA,TipPice,Shift)*Dev;
   //----------------------------------------------------------------- îòêðûòèå ïîçèöèé Bay
   if (TimeBar!=Time[0]) OrdersBar=0;
   if (N_Orders_Bar > OrdersBar)
   {  
      if ((MA-StdDev-DeltaStart*Point)>Ask)//íèæå áîëèíæåðà
      { 
         if (!Sell && ORDERS(1) < N_Orders) 
         {
            if (DrawVisualization)
            {  Name=StringConcatenate("Buy  ",TimeToStr(Time[0],TIME_MINUTES));
               ObjectCreate(Name,OBJ_ARROW,0,Time[0],Bid,0,0,0,0);ObjectSet(Name,OBJPROP_WIDTH,2);
               ObjectSet(Name,OBJPROP_ARROWCODE,233);ObjectSet(Name,OBJPROP_COLOR,Red);
            }
            OPENORDER("Buy");
         }
         if (BuySell && ORDERS(-1) < N_Orders) 
         {
            if (DrawVisualization)
            {  Name=StringConcatenate("Sell ",TimeToStr(Time[0],TIME_MINUTES));
               ObjectCreate(Name,OBJ_ARROW,0,Time[0],Ask,0,0,0,0);ObjectSet(Name,OBJPROP_WIDTH,2);
               ObjectSet(Name,OBJPROP_ARROWCODE,234);ObjectSet(Name,OBJPROP_COLOR,Blue);
            }
            OPENORDER ("Sell");
         }
      }
      //----------------------------------------------------------------- îòêðûòèå ïîçèöèé Sell
      if ((MA+StdDev+DeltaStart*Point)<Bid)//âûøå áîëèíæåðà
      {
         if (!Buy && ORDERS(-1) < N_Orders) 
         {
            OPENORDER ("Sell");
            if (DrawVisualization)
            {  Name=StringConcatenate("Sell ",TimeToStr(Time[0],TIME_MINUTES));
               ObjectCreate(Name,OBJ_ARROW,0,Time[0],Ask,0,0,0,0);ObjectSet(Name,OBJPROP_WIDTH,2);
               ObjectSet(Name,OBJPROP_ARROWCODE,234);ObjectSet(Name,OBJPROP_COLOR,Blue);
            }
         }
         if (BuySell && ORDERS(1) < N_Orders) 
         {
            if (DrawVisualization)
            {  Name=StringConcatenate("Buy  ",TimeToStr(Time[0],TIME_MINUTES));
               ObjectCreate(Name,OBJ_ARROW,0,Time[0],Bid,0,0,0,0);ObjectSet(Name,OBJPROP_WIDTH,2);
               ObjectSet(Name,OBJPROP_ARROWCODE,233);ObjectSet(Name,OBJPROP_COLOR,Red);
            }
            OPENORDER ("Buy");
         }
   }  }
   //----------------------------------------------------------------- çàêðûòèå ïîçèöèé
   int Ticket;
   for (int i=0; i<OrdersTotal(); i++)
   {                                               
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {  if (OrderSymbol()!=Symbol() || Magic!=OrderMagicNumber()) continue;
         Ticket = OrderTicket();
         if (OrderType()==OP_BUY)
         {  if ((Bid-OrderOpenPrice())/Point>=Profit)
            {  Comment("Çàêðûòèå  îðäåðà ",Ticket,"   ",Symbol());
               if (!OrderClose(Ticket,OrderLots(),NormalizeDouble(Bid, Digits),slippage,CLR_NONE))
                  Comment("Îøèáêà çàêðûòèÿ  ",TxtERROR(0),"   ",Symbol());
            }
         }
         if (OrderType()==OP_SELL)
         {  if ((OrderOpenPrice()-Ask)/Point>=Profit)
            {  Comment("Çàêðûòèå  îðäåðà ",Ticket,"   ",Symbol());
               if (!OrderClose(Ticket,OrderLots(),NormalizeDouble(Ask, Digits),slippage,CLR_NONE))
                  Comment("Îøèáêà çàêðûòèÿ  ",TxtERROR(0),"   ",Symbol());
            }
         }
      }   
   }
return(0);
}
//--------------------------------------------------------------------
void OPENORDER(string ord)
{
   int error;
   double SL,TP;
   int STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL);
   if (stoploss!=0 && stoploss<STOPLEVEL) stoploss=STOPLEVEL;
   if (takeprofit!=0 && takeprofit<STOPLEVEL) takeprofit=STOPLEVEL;
   if (ord=="Buy" )
   {
      if (stoploss==0) SL =0; else SL = NormalizeDouble((Bid - stoploss*Point),Digits);   
      if (takeprofit==0) TP =0; else TP = NormalizeDouble((Ask + takeprofit*Point),Digits);            
      error=OrderSend(Symbol(),OP_BUY, Lot,NormalizeDouble(Ask, Digits),slippage,SL,TP,"",Magic,3);
      if (error==-1) Comment("Îøèáêà îòêðûòèÿ Buy ",TxtERROR(0),"  price ",Ask,"   ",Symbol()," Lot ",Lot);
      else {TimeBar=Time[0];OrdersBar++;}
   }
   if (ord=="Sell")
   { 
      if (takeprofit==0) TP =0; else TP = NormalizeDouble((Bid - takeprofit*Point),Digits);   
      if (stoploss==0) SL =0; else SL = NormalizeDouble((Ask + stoploss*Point),Digits);            
      error=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid, Digits),slippage,SL,TP,"",Magic,3);
      if (error==-1) Comment("Îøèáêà îòêðûòèÿ Sell ",TxtERROR(0),"  price ",Bid,"   ",Symbol()," Lot ",Lot);
      else {TimeBar=Time[0];OrdersBar++;}
   }
return;
}                  
//--------------------------------------------------------------------
int ORDERS(int tip)
{
   int N_Sell,N_Buy;
   for (int i=0; i<OrdersTotal(); i++)
   {                                               
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
      {
         if (OrderSymbol()!=Symbol() || Magic!=OrderMagicNumber()) continue;
         if (OrderType()==OP_BUY ) N_Buy++;
         if (OrderType()==OP_SELL) N_Sell++;
      }   
   }
if (tip== 0) return(N_Buy+N_Sell);
if (tip== 1) return(N_Buy);
if (tip==-1) return(N_Sell);
}                  
//--------------------------------------------------------------------
string TxtERROR(int e)
{
   if (e==0) e = GetLastError();
   switch ( e )
   {                  
      case 0:   return;
      case 1:   return;
      case 2:   return("Îáùàÿ îøèáêà  ");
      case 3:   return("íåïðàâèëüíûå ïàðàìåòðû   ");
      case 6:   return("Íåò ñâÿçè ñ òîðãîâûì ñåðâåðîì   ");
      case 130: return("Íåïðàâèëüíûå ñòîïû   ");
      case 131: return("Íåïðàâèëüíûé îáúåì ");
      case 132: return("Ðûíîê çàêðûò ");
      case 133: return("Òîðãîâëÿ çàïðåùåíà ");
      case 134: return("Íåäîñòàòî÷íî äåíåã   ");
      case 136: return("Íåò öåí ");
      case 146: return("Ïîäñèñòåìà òîðãîâëè çàíÿòà ");
      case 129: return("Íåïðàâèëüíàÿ öåíà ");
      case 131: return("Íåïðàâèëüíûé îáúåì ");
      case 4051:return("Íåäîïóñòèìîå çíà÷åíèå ïàðàìåòðà ôóíêöèè ");
      case 4059:return("Ôóíêöèÿ íå ðàçðåøåíà â òåñòîâîì ðåæèìå");
      case 4063:return("Îæèäàåòñÿ ïàðàìåòð òèïà integer ");
      case 4105:return("Íè îäèí îðäåð íå âûáðàí ");
      case 4107:return("Íåïðàâèëüíûé ïàðàìåòð öåíû äëÿ òîðãîâîé ôóíêöèè ");
      case 4108:return("Íåâåðíûé íîìåð òèêåòà ");
      case 4109:return("Òîðãîâëÿ íå ðàçðåøåíà. Íåîáõîäèìî âêëþ÷èòü îïöèþ `Ðàçðåøèòü ñîâåòíèêó òîðãîâàòü` â ñâîéñòâàõ ýêñïåðòà.");
      case 4200:return("Îáúåêò óæå ñóùåñòâóåò ");
      default:  return(StringConcatenate("Error  ",e,"   "));
   }
}
//--------------------------------------------------------------------
void TrailingStop(int NL, int tral)
{
   int tip,Ticket;
   bool error;
   double StLo,OSL,OOP;
   for (int i=0; i<OrdersTotal(); i++) 
   {  if (OrderSelect(i, SELECT_BY_POS)==true)
      {  tip = OrderType();
         if (tip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
         {
            OSL   = OrderStopLoss();
            OOP   = OrderOpenPrice();
            Ticket = OrderTicket();
            if (tip==OP_BUY)             
            {
               if (NL==1 && OSL>OOP) continue;
               StLo = NormalizeDouble(Bid - tral*Point,Digits); 
               if (StLo > OSL && StLo > OOP)
               {  error=OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,White);
                  Comment("TrailingStop ",Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES));
                  Sleep(500);
                  if (!error) Print(Symbol(),"   Error order ",Ticket," TrailingStop ",GetLastError());
               }
            }                                         
            if (tip==OP_SELL)        
            {
               if (NL==1 && (OSL<OOP&&OSL!=0)) continue;
               StLo = NormalizeDouble(Ask + tral*Point,Digits);
               if ((StLo < OSL||OSL==0) && StLo < OOP)
               {  error=OrderModify(Ticket,OOP,StLo,OrderTakeProfit(),0,White);
                  Comment("TrailingStop ",Ticket," ",TimeToStr(TimeCurrent(),TIME_MINUTES));
                  Sleep(500);
                  if (!error) Print(Symbol(),"   Error order ",Ticket," TrailingStop ",GetLastError());
               }
            } 
         }
      }
   }
}
//--------------------------------------------------------------------

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