st+L+2stor-V1_M

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
834.00 %
Total Trades 23
Won Trades 0
Lost trades 0
Win Rate 0.00 %
Expected payoff 9.26
Gross Profit 242.00
Gross Loss -29.00
Total Net Profit 213.00
-100%
-50%
0%
50%
100%
GBP/USD Oct 2024 - Jan 2025
48.00 %
Total Trades 40
Won Trades 39
Lost trades 1
Win Rate 0.98 %
Expected payoff -11.23
Gross Profit 416.00
Gross Loss -865.00
Total Net Profit -449.00
-100%
-50%
0%
50%
100%
st+L+2stor-V1_M
//+------------------------------------------------------------------+
//|                                                      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);
  }
// the end.

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