Fractured Fractals

Author: Copyright � 2005, tageiger aka fxid10t@yahoo.com
Price Data Components
Series array that contains open time of each bar
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
Fractals
0 Views
0 Downloads
0 Favorites
Fractured Fractals
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                           Fractured Fractals.mq4 |
//|                 Copyright © 2005, tageiger aka fxid10t@yahoo.com |
//|                MetaTrader_Experts_and_Indicators@yahoogroups.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, tageiger aka fxid10t@yahoo.com"
#property link      "MetaTrader_Experts_and_Indicators@yahoogroups.com"
extern double     MaximumRisk       =0.02;
extern double     DecreaseFactor    =3;
string            TradeSymbol;      TradeSymbol=Symbol();
string            comment;          comment="m Fractured Fractal";
double            spread;           spread=Ask-Bid;
int               b.1,s.1,ticket;
double            bs,ss,btsl,stsl,fu,fd,cfu,pfu,cfd,pfd;
static double     pfu.1,pfu.2,pfu.3,pfd.1,pfd.2,pfd.3;
int init()  {  return(0);  }
int deinit(){  return(0);  }
int start() {
fu=iFractals(Symbol(),0,MODE_UPPER,3);//Print(fu);
fd=iFractals(Symbol(),0,MODE_LOWER,3);//Print(fd);
   if(fu>0) {  cfu=fu; pfu.3=pfu.2;pfu.2=pfu.1;pfu.1=pfu;   }  else pfu=cfu;
   if(fd>0) {  cfd=fd; pfd.3=pfd.2;pfd.2=pfd.1;pfd.1=pfd;   }  else pfd=cfd;
   if(TotalTradesThisSymbol(TradeSymbol)==0)  { b.1=0;s.1=0;   }
   if(TotalTradesThisSymbol(TradeSymbol)>0)  {
      for(int cnt=0;cnt<OrdersTotal();cnt++) {
         OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()==TradeSymbol) {
         if(OrderMagicNumber()==101)  {b.1=OrderTicket(); }
         if(OrderMagicNumber()==102)  {s.1=OrderTicket(); } }  }  }
   if(b.1==0 && cfu>0 && pfu.1>0 && cfu>pfu.1) {
      ticket=OrderSend(Symbol(),
                       OP_BUYSTOP,
                       LotsOptimized(),
                       cfu+spread,
                       0,
                       cfd-spread,
                       0,
                       Period()+comment,
                       101,
                       0,
                       Green);
                       if(ticket>0)   {
                         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
                           {  b.1=ticket;  Print(ticket); }
                         else Print("Error Opening BuyStop Order: ",GetLastError());
                         return(0);  }  }
   if(s.1==0 && cfd>0 && pfd.1>0 && cfd<pfd.1) {
      ticket=OrderSend(Symbol(),
                       OP_SELLSTOP,
                       LotsOptimized(),
                       cfd-spread,
                       0,
                       cfu+spread,
                       0,
                       Period()+comment,
                       102,
                       0,
                       Red);
                       if(ticket>0)   {
                         if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
                           {  s.1=ticket;  Print(ticket); }
                         else Print("Error Opening BuyStop Order: ",GetLastError());
                         return(0);  }  }
   for(int c=0;c<OrdersTotal();c++)   {
      OrderSelect(c,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderComment()==Period()+comment)   {
         if(OrderType()==OP_BUYSTOP && pfu.1<OrderOpenPrice()) {
            OrderDelete(OrderTicket());   }
         if(OrderType()==OP_SELLSTOP && pfd.1>OrderOpenPrice())  {
            OrderDelete(OrderTicket());   }
         if(OrderType()==OP_BUY && pfu.1>OrderStopLoss() && pfu.1<cfu)  {
            OrderModify(OrderTicket(),
                        OrderOpenPrice(),
                        pfu.1-spread,
                        OrderTakeProfit(),
                        0,
                        Aqua);   }
         if(OrderType()==OP_SELL && pfd.1+spread<OrderStopLoss() && pfd.1>cfd) {
            OrderModify(OrderTicket(),
                        OrderOpenPrice()<
                        pfd.1+spread,
                        OrderTakeProfit(),
                        0,
                        HotPink);   }
      OrderSelect(b.1,SELECT_BY_TICKET);   if(OrderCloseTime()>0) {b.1=0;}
      OrderSelect(s.1,SELECT_BY_TICKET);   if(OrderCloseTime()>0) {s.1=0;} }  }
if(!IsTesting()) PrintComments();
return(0);
}//end start
//Functions
void PrintComments() {  Comment("Current Time: ",TimeToStr(CurTime(),TIME_MINUTES),"\n",
                                "UpFrac[0] ",cfu,"\n","UpFrac[1] ",pfu.1,"\n",
                                "DownFrac[0] ",cfd,"\n","DownFrac[1] ",pfd.1);  }
double LotsOptimized()  {
   double lot;
   int    orders=HistoryTotal();
   int    losses=0;
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
   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);   }
   if(lot<0.1) lot=0.1;
return(lot);   }//end LotsOptimized
int TotalTradesThisSymbol(string TradeSymbol) {
   int i, TradesThisSymbol=0;
   for(i=0;i<OrdersTotal();i++)  {
      OrderSelect(i,SELECT_BY_POS);
      if(OrderSymbol()==TradeSymbol &&
         OrderMagicNumber()==101 ||
         OrderMagicNumber()==102)   {  TradesThisSymbol++;  }   }
return(TradesThisSymbol);  }//end TotalTradesThisSymbol

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