FractalArtificialIntelligence

Orders Execution
Checks for the total of open ordersIt automatically opens orders when conditions are reachedIt can change open orders parameters, due to possible stepping strategy
Indicators Used
FractalsIndicator of the average true rangeMoving average indicator
0 Views
0 Downloads
0 Favorites

Profitability Reports

AUD/USD Oct 2024 - Jan 2025
0.00 %
Total Trades 0
Won Trades 0
Lost trades 0
Win Rate 0.0 %
Expected payoff 0.00
Gross Profit 0.00
Gross Loss 0.00
Total Net Profit 0.00
-100%
-50%
0%
50%
100%
GBP/USD Oct 2024 - Jan 2025
0.00 %
Total Trades 0
Won Trades 0
Lost trades 0
Win Rate 0.0 %
Expected payoff 0.00
Gross Profit 0.00
Gross Loss 0.00
Total Net Profit 0.00
-100%
-50%
0%
50%
100%
NZD/USD Oct 2024 - Jan 2025
0.00 %
Total Trades 0
Won Trades 0
Lost trades 0
Win Rate 0.0 %
Expected payoff 0.00
Gross Profit 0.00
Gross Loss 0.00
Total Net Profit 0.00
-100%
-50%
0%
50%
100%
FractalArtificialIntelligence
//+------------------------------------------------------------------+
//|                                FractalArtificialIntelligence.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "mich99@o2.pl inspired by Yury V. Reshetov ICQ:282715499 http://reshetov.xnet.uz/"
#property link      ""
//---- input parameters

extern int    x1 = 100;
extern int    x2 = 100;
extern int    x3 = 100;
extern int    x4 = 100;


extern int    s1 = 3;
extern int    s2 = 3;
extern int    s3 = 3;
extern int    s4 = 3;



// StopLoss level



extern double sl = 550; // for four digits =55
extern double profittrail=2;
extern double lots = 0.1;
extern int MagicNumber = 777888;
static int prevtime = 0;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   if(Time[0] == prevtime) 
       return(0);
   prevtime = Time[0];
   int spread = 3;
//----
   if(IsTradeAllowed()) 
     {
       RefreshRates();
       spread = MarketInfo(Symbol(), MODE_SPREAD);
     } 
   else 
     {
       prevtime = Time[1];
       return(0);
     }
   int ticket = -1;
// check for opened position
   int total = OrdersTotal();   
//----





   for(int i = 0; i < total; i++) 
     {
       OrderSelect(i, SELECT_BY_POS, MODE_TRADES); 
       // check for symbol & magic number
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) 
         {
           int prevticket = OrderTicket();
           // long position is opened
           if(OrderType() == OP_BUY) 
             {
               // check profit 
               if(Bid > (OrderStopLoss() + (sl * profittrail  + spread) * Point)) 
                 {               
                   if(Crossed()<0 )  
                     { // reverse
                       ticket = OrderSend(Symbol(), OP_SELL, lots * 2, Bid, 3, 
                                          Ask + sl * Point, 0, WindowExpertName(), MagicNumber, 0, Red); 
                       Sleep(30000);
                       //----
                       if(ticket < 0) 
                           prevtime = Time[1];
                       else 
                           OrderCloseBy(ticket, prevticket, Blue);   
                     } 
                   if(Crossed()>0 ) 
                     { // trailing stop
                       if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - sl * Point, 
                          0, 0, Blue)) 
                         {
                           Sleep(30000);
                           prevtime = Time[1];
                         }
                     }
                 }  
               // short position is opened
             } 
           else 
             {
               // check profit 
               if(Ask < (OrderStopLoss() - (sl * profittrail + spread) * Point)) 
                 {
                   if(Crossed()>0 )  
                     { // reverse
                       ticket = OrderSend(Symbol(), OP_BUY, lots * 2, Ask, 3, 
                                          Bid - sl * Point, 0, WindowExpertName(), MagicNumber, 0, Blue); 
                       Sleep(30000);
                       //----
                       if(ticket < 0) 
                           prevtime = Time[1];
                       else 
                           OrderCloseBy(ticket, prevticket, Blue);   
                     } 
                   if(Crossed()<0 ) 
                     { // trailing stop
                       if(!OrderModify(OrderTicket(), OrderOpenPrice(), Ask + sl * Point, 
                          0, 0, Blue)) 
                         {
                           Sleep(30000);
                           prevtime = Time[1];
                         }
                     }
                 }  
             }
           // exit
           return(0);
         }
     }
// check for long or short position possibility
   if(Crossed()>0 ) 
     { //long
       ticket = OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Bid - sl * Point, 0, WindowExpertName(), 
                          MagicNumber, 0, Blue); 
       //----
       if(ticket < 0) 
         {
           Sleep(30000);
           prevtime = Time[1];
         }
     } 
   if(Crossed()<0 ) 
     { // short
       ticket = OrderSend(Symbol(), OP_SELL, lots, Bid, 3, Ask + sl * Point, 0, WindowExpertName(), 
                          MagicNumber, 0, Red); 
       if(ticket < 0) 
         {
           Sleep(30000);
           prevtime = Time[1];
         }
     }
//--- exit
   return(0);
  }
//+------------------------------------------------------------------+
//| The PERCEPTRON - a perceiving and recognizing function           |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
  
  
  
   double Cro1(int period)
   {
    
   double frup = iFractals(NULL, 5, MODE_UPPER, period);
   double frdw = iFractals(NULL, 5, MODE_LOWER, period);
   
      
   double mid = Close[1];//iMA(NULL,0,period,0,MODE_SMA, PRICE_CLOSE, 1);
	double masell = iMA(NULL,5,50,0,MODE_SMA, PRICE_CLOSE, 1)+ 2 * iATR(NULL, 5, 50, 1);
   double mabuy = iMA(NULL,5,50,0,MODE_SMA, PRICE_CLOSE, 1)- 2 * iATR(NULL, 5, 50, 1);

    if ( mid > frup && frup!=0 && mid < masell) return (-1); 
    if ( mid < frdw && frdw!=0  && mid > mabuy ) return (1); 
    
     return (0); 
   }
   
   
       
   double Cro2(int period) 
   {
    double mid = Close[1];//iMA(NULL,0,period,0,MODE_SMA, PRICE_CLOSE, 1);
	double frup = iFractals(NULL, 15, MODE_UPPER, period);
   double frdw = iFractals(NULL, 15, MODE_LOWER, period);
   
   double masell = iMA(NULL,15,50,0,MODE_SMA, PRICE_CLOSE, 1)+ 2 * iATR(NULL, 15, 50, 1);
   double mabuy = iMA(NULL,15,50,0,MODE_SMA, PRICE_CLOSE, 1)- 2 * iATR(NULL, 15, 50, 1);

    if ( mid > frup && frup!=0 && mid < masell) return (-1); 
    if ( mid < frdw && frdw!=0  && mid > mabuy ) return (1);
     
     return (0); //elsewhere
   }    
     
     
     double Cro3(int period)   
   {
   double frup = iFractals(NULL, 60, MODE_UPPER, period);
   double frdw = iFractals(NULL, 60, MODE_LOWER, period);
   
    
   double mid = Close[1];//iMA(NULL,0,period,0,MODE_SMA, PRICE_CLOSE, 1);
	double masell = iMA(NULL,60,50,0,MODE_SMA, PRICE_CLOSE, 1)+ 2 * iATR(NULL, 60, 50, 1);
   double mabuy = iMA(NULL,60,50,0,MODE_SMA, PRICE_CLOSE, 1)- 2 * iATR(NULL, 60, 50, 1);

    if ( mid > frup && frup!=0 && mid < masell) return (-1); 
    if ( mid < frdw && frdw!=0  && mid > mabuy ) return (1); 
      
     return (0); //elsewhere
   }    
    
    
    
     
     double Cro4(int period)
   {
   double frup = iFractals(NULL, 240, MODE_UPPER, period);
   double frdw = iFractals(NULL, 240, MODE_LOWER, period);
   
      
   double mid = Close[1];//iMA(NULL,0,period,0,MODE_SMA, PRICE_CLOSE, 1);
	double masell = iMA(NULL,240,50,0,MODE_SMA, PRICE_CLOSE, 1)+ 2 * iATR(NULL, 240, 50, 1);
   double mabuy = iMA(NULL,240,50,0,MODE_SMA, PRICE_CLOSE, 1)- 2 * iATR(NULL, 240, 50, 1);

    if ( mid > frup && frup!=0 && mid < masell) return (-1); //up trend
    if ( mid < frdw && frdw!=0  && mid > mabuy ) return (1); //down trend
     
    
    
    
     return (0); //elsewhere
   }    
             
             
     double Crossed() 
  {
   double w1 = x1 - 100.0;
   double w2 = x2 - 100.0;
   double w3 = x3 - 100.0;
   double w4 = x4 - 100.0;
  
   double a1 = Cro1(s1);
   double a2 = Cro2(s2);
   double a3 = Cro3(s3);
   double a4 = Cro4(s4);
 
   return(w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4);
  }
  
  
 

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