st+L+2stor-V1-1

Author: Copyright � 2005, MetaQuotes Software Corp.
Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt Closes Orders by itself
Indicators Used
Commodity channel indexMoving average indicator
Miscellaneous
Uses files from the file systemIt writes information to file
0 Views
0 Downloads
0 Favorites

Profitability Reports

AUD/USD Oct 2024 - Jan 2025
954.00 %
Total Trades 25
Won Trades 0
Lost trades 0
Win Rate 0.00 %
Expected payoff 8.88
Gross Profit 248.00
Gross Loss -26.00
Total Net Profit 222.00
-100%
-50%
0%
50%
100%
st+L+2stor-V1-1
//+------------------------------------------------------------------+
//|                                                      Starter.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
//#include <Tracert.mqh>
extern double  Lots           = 0.1;
extern double  MaximumRisk    = 0.03;
extern double  DecreaseFactor = 3;
extern int     Stop           = 10;
extern int     SL             = 0;   //Äëÿ "ýñòåòîâ" èç ôîðóìó StopLoss
//extern double Lots = 4;
//Ïàðàìåòðû Laguerre
extern double  GammaP         = 0.7; // Íåêàÿ "Ãàììà" èç ïàðàìåòðîâ "Laguerre"
extern double  StopL          = 0.1; // "Ïîðîã" "Laguerre" äëÿ çàêðûòèÿ ïîçèöèè
extern int     ShftL          = 0;   // Áàð, íà êîòîðîì ðàññ÷èòûâàåòñÿ "Laguerre"
//Ïàðàìåòðû CCI
extern int     CCIperiod      = 14;  // Ñîáñòâåííî ïåðèîä CCI
extern int     TypeCCI        = 0;   // "Öåíîâûå êîíñòàíòû" äëÿ ðàñ÷òåèà CCI 
                                     // 0-Close, 1-Open, 2-High, 3-Low, 4-Median, 
                                     // 5-Typical, 6-WEIGHTED
extern int     DAlpha         = 0;   // Äåëüòà CCI - "ïîðîã èçìåíåíèÿ ñêîðîñòè CCI" 
                                     // â ïðîöåíòàõ
extern int     CCILevel       = 100; // Êëàññè÷åñêè - óðîâåíü, êîòîðûé äîëæíà 
                                     // ïåðåñå÷ü CCI, ÷òîáû äàòü ñèãíàë. 
                                     // Êëàññèêà +/-100, 0, â îðèãèíàëüíîì 
                                     // starter'å +/-5. ß çàêîììåíòèðîâàë, ò.ê.....
extern int     ShftA1         = 0;   // Áàð äëÿ ðàñ÷åòà "òåêóùåé" CCI
extern int     ShftA2         = 1;   // Áàð äëÿ ðàñ÷åòà "ïðåäûäóùåé" CCI
//Ïàðàìåòðû MA
extern double  MAPeriod       = 120; // Ñîáñòâåííî ïåðèîä MA
extern int     TypeMA         = 0;   // "Öåíîâûå êîíñòàíòû" äëÿ ðàñ÷òåèà MA 
                                     // 0-Close, 1-Open, 2-High, 3-Low, 4-Median, 
                                     // 5-Typical, 6-WEIGHTED
extern int     ShftMA         = 0;   // Áàð äëÿ ðàñ÷åòà "òåêóùåé" MA (Áàð äëÿ 
                                     // "ïðåäûäóùåé" MA = ShftMA+1 (â îòëè÷èè îò CCI))
extern double  DeltaMA        = 0.1; // Äåëüòà MA ("òåêóùåãî" è "ïðåäûäóùåãî" áàðà) â "ïèïñàõ"
//MagicNubber
extern int     MagicNumber    = 20051016; // ß âñåãäà âûíîøó, ÷òîáû ìîæíî áûëî, 
                                          // ÍÀÏÐÈÌÅÐ, òîðãîâàòü íà îäíîé ïàðå 
                                          // ñ ðàçíûìè ïàðàìåòðàìè
int handle;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---- 
   handle = FileOpen("StarterDebug.csv",  FILE_CSV | FILE_WRITE);
   FileWrite(handle, "Time[0]", "TradeType", "Laguerre", "MA", 
             "MA1", "DMA", "Alpha1", "Alpha2", "DAlpha");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   FileClose(handle);  
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
   double lot = Lots;
   int    orders = HistoryTotal(); // history orders total
   int    losses = 0;              // number of losses orders without a break
//---- select lot size
   lot = NormalizeDouble(AccountFreeMargin()*MaximumRisk / 500, 1);
//---- calcuulate number of losses orders without a break
   if(DecreaseFactor > 0)
     {
       for(int i = orders - 1; i >= 0; i--)
         {
           if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == false) 
             { 
               Print("Error in history!"); 
               break; 
             }
           //----
           if(OrderSymbol() != Symbol() || OrderType() > OP_SELL) 
               continue;
           //----
           if(OrderProfit() > 0) 
               break;
           //----
           if(OrderProfit() < 0) 
               losses++;
         }
       //----
       if(losses > 1) 
           lot = NormalizeDouble(lot - lot*losses / DecreaseFactor, 1);
     }
//---- return lot size
   if(lot < 1) 
       lot = 1;
//----
   if(lot > 1000) 
       lot = 1000;
   return(lot);
  }  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+  
double LaGuerre(double gamma, int shift)
  {
	  double RSI;
	  double L0[100];
	  double L1[100];
	  double L2[100];
	  double L3[100];
	  double CU, CD;
//----
	  for(int i = shift + 99; i >= shift; i--)
	    {
		     L0[i] = (1.0 - gamma)*Close[i] + gamma*L0[i+1];
		     L1[i] = -gamma*L0[i] + L0[i+1] + gamma*L1[i+1];
		     L2[i] = -gamma*L1[i] + L1[i+1] + gamma*L2[i+1];
		     L3[i] = -gamma*L2[i] + L2[i+1] + gamma*L3[i+1];
		     CU = 0;
		     CD = 0;
		     if(L0[i] >= L1[i])  
		         CU = L0[i] - L1[i];
		     else
		         CD = L1[i] - L0[i];
		     //----
       if(L1[i] >= L2[i])  
		         CU = CU + L1[i] - L2[i];
		     else
		         CD = CD + L2[i] - L1[i];
		     //----
       if(L2[i] >= L3[i])  
		         CU = CU + L2[i] - L3[i];
		     else
		         CD = CD + L3[i] - L2[i];
		     //----
       if(CU + CD != 0)		
		         RSI = CU / (CU + CD);
	    }
   return(RSI);
  }  
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   double Laguerre;
   double SLstop;
   double Alpha1, Alpha2;
   double MA, MA1;
//+--   double Juice;
   int cnt, ticket, RealTotal, total;
//  Laguerre=iCustom(NULL, 0, "Laguerre", 0, 0);
   Laguerre = LaGuerre(GammaP, 0);
   Alpha1 = iCCI(NULL, 0, CCIperiod, TypeCCI, ShftA1);
   Alpha2 = iCCI(NULL, 0, CCIperiod, TypeCCI, ShftA2);
   MA = iMA(NULL, 0, MAPeriod, 0, MODE_EMA, TypeMA, ShftMA);
   MA1 = iMA(NULL, 0, MAPeriod, 0, MODE_EMA, TypeMA, ShftMA + 1);
//+--  Juice=iCustom(NULL,0,"Juice",0,0);
   total = OrdersTotal();
// Èùåì ðåàëüíîå ÷èëî òîðãîâûõ îðäåðîâ äëÿ íàøåãî MagicNumber íà íàøåé ïàðå, 
// ÷òîáû äàòü òîðãîâàòü ñåáå è äðóãèì ñîâåòíèêàì
   for(cnt = 0; cnt < total; cnt++)
     {
       OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
       if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol())
           RealTotal = RealTotal + 1;
     }
   if(RealTotal < 1) 
     {
       // no opened orders identified
       if(AccountFreeMargin() < (1000*Lots))
         {
           Print("We have no money. Free Margin = ", AccountFreeMargin());
           return(0);  
         }
       // check for long position (BUY) possibility
       if(//Èç "îðèãèíàëà" 
          (Laguerre==0) && 
          //Íå ïðîñòî ðîñò MA, íî è ìèíèìóì íåêîòîðóþ äåëüòó
          (MA - MA1 > DeltaMA * Point) && 
          //Ðîñò CCI
          (Alpha2 < Alpha1) && 
          //Ïåðåñå÷åíèå íåêîòîðîãî óðîâíÿ +/-100, 0 "Ñíèçó-ââåðõ"
          (Alpha1 > -1 * CCILevel && Alpha2 < -1 * CCILevel) && 
          // && // îðèãèíàëå (åñëè ÷åñòíî - íå ïîíÿë. ÈÌÕÎ èìåëîñü ââèäó ïåðåñå÷åíèå 
          // èëè "ïîäõîä" ê) 0, íî, åñëè ñìîòðåòü îòëàäî÷íûé ôàéë, òî òàì ....
          // (Alpha1 < -5)
          //Ðîñò CCI â % áîëüøå ïîðîãà
          (MathAbs(Alpha1 - Alpha2) / MathMax(MathAbs(Alpha1), MathAbs(Alpha2))*100 > DAlpha)
          ) //+-- && Juice>JuiceLevel)
         {
           FileWrite(handle, "Buy", Time[0], Laguerre, MA, MA1, MA-MA1, Alpha1, Alpha2, 
                     MathAbs(Alpha1 - Alpha2) / MathMax(MathAbs(Alpha1), 
                     MathAbs(Alpha2))*100 );
           FileFlush(handle);
           //Äëÿ "ýñòåòîâ" StopLoss
           if(SL == 0)
               SLstop = 0;
           else
               SLstop = Ask - SL * Point;
           ticket = OrderSend(Symbol(), OP_BUY, LotsOptimized(), Ask, 3, SLstop, 0, 
                              "starter", MagicNumber, 0, Green);
         }
       // check for short position (SELL) possibility
       if(//Èç "îðèãèíàëà"
          (Laguerre==1) && 
          //Íå ïðîñòî ïàäåíèå MA, íî è ìèíèìóì íåêîòîðóþ äåëüòó
          (MA - MA1 < -1 * DeltaMA * Point) && 
          //Ïàäåíèå CCI
          (Alpha2 > Alpha1) && 
          //Ïåðåñå÷åíèå íåêîòîðîãî óðîâíÿ +/-100, 0 "Ñâåðõó-âíèç"
          (Alpha1 < CCILevel && Alpha2 > CCILevel)
//      && // îðèãèíàëå (åñëè ÷åñòíî - íå ïîíÿë. ÈÌÕÎ èìåëîñü ââèäó ïåðåñå÷åíèå (èëè "ïîäõîä" ê) 0, íî, åñëè ñìîòðåòü îòëàäî÷íûé ôàéë, òî òàì ....
//         (Alpha1 > 5)
      && //Ðîñò CCI â % áîëüøå ïîðîãà
         (MathAbs(Alpha1 - Alpha2)/MathMax(MathAbs(Alpha1),MathAbs(Alpha2))*100 > DAlpha)
        ) //+-- && Juice>JuiceLevel)
        {
         FileWrite(handle, "Sell", Time[0], Laguerre, MA, MA1, MA-MA1, Alpha1, Alpha2, MathAbs(Alpha1 - Alpha2)/MathMax(MathAbs(Alpha1),MathAbs(Alpha2))*100 );
         FileFlush(handle);
         //Äëÿ "ýñòåòîâ" StopLoss
         if (SL == 0)
          SLstop = 0;
         else
          SLstop = Bid + SL * Point;
         ticket=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,SLstop,0,"starter",MagicNumber,0,Red);
        } 
     }
// it is important to enter the market correctly, 
   // but it is more important to exit it correctly...   
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol() &&  // check for symbol
         OrderMagicNumber() == MagicNumber)  // check for MagicNumber (×òîáû ðóëèòü òîëüêî ñâîèìè ñäåëêàìè ñâîåãî ñîâåòíèêà)
        {
         if(OrderType()==OP_BUY)   // long position is opened
           {
            // should it be closed?
            if(Laguerre>1-StopL)
                {
                 OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
                 return(0); // exit
                }
            // check for stop
            if(Stop>0)  
              {                 
               if(Bid-OrderOpenPrice()>Point*Stop)
                 {
                   OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
                   return(0);
                 }
              }
           }
         else // go to short position
           {
            // should it be closed?
            if(Laguerre<StopL)
              {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
               return(0); // exit
              }
            // check for stop
            if(Stop>0)  
              {                 
               if(OrderOpenPrice()-Ask>Point*Stop)
                 {
                   OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
                   return(0);
                 }
              }
           }
        }
     }
     
   return(0);
  }
//+------------------------------------------------------------------+

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