escape2reversed-2-maxorders

This script is designed to automatically trade currencies in the Forex market. Here's the breakdown of its logic:

1. Initial Setup (the "extern" part):

  • It starts by defining a set of customizable settings, like how much profit it should aim for ("TakeProfit"), how much loss it's willing to risk ("StopLoss"), the size of trades it should make ("Lots"), and whether it should reverse its trading logic ("reverseLogic"). These are the "knobs and dials" the user can adjust to tweak the robot's behavior.
  • It also sets up visual elements, like colors for buy and sell signals, and optional alerts like sounds.
  • A "magic number" is a unique identifier, like a license plate for the script, to help it manage its own trades and avoid interfering with trades placed manually or by other scripts.

2. Ongoing Monitoring and Action (the "start" part):

  • Trade Management: The script continuously checks all open trades on the currency pair it's attached to.
  • Profit Protection: If a trade is in profit, the script has a mechanism to potentially close it if the profit starts to decline significantly after reaching a high point. It does this by tracking how many times the profit decreases consecutively. If the profit dips too many times in a row, it assumes the trend is reversing and closes the trade to secure the existing profit.
  • Stop Loss Adjustment (Trailing Stop): The script can also automatically adjust the "StopLoss" order to protect profits as the price moves in a favorable direction. This is called a "trailing stop." As the price goes up for a buy trade (or down for a sell trade), the StopLoss is moved along with it, ensuring that if the price suddenly reverses, the trade will still close with a profit.
  • Checking Conditions to open a trade: It uses a moving average and its relation to the latest price to identify potential buying or selling opportunities. Moving averages smooth out price fluctuations and can indicate the overall trend.
  • Opening New Trades: If the conditions are met and there are no existing trades, the script opens a buy or sell trade based on the moving average analysis. The direction of the trade is determined by whether the "reverseLogic" setting is enabled.

3. Decision Making:

  • Buy or Sell?: The decision to buy or sell is based on the relationship between the current price and its moving averages, potentially inverted by a "reverseLogic" setting.
  • When to Close?: Trades are closed either when the stop loss is hit, or the profit retracement mechanism triggers a close to preserve gains.

4. Auxiliary functions:

  • ExistPositions(): It scans open trades to determine if the EA has already opened positions in the current symbol
  • TrailingPositionsBuy/Sell(): Manages trailing stops. It determines if the stop loss needs to be adjusted to lock in profits as the price moves in a favorable direction.
  • ModifyStopLoss(): Modifies the stop loss for an existing order.
  • OpenBuy/OpenSell(): Opens new buy or sell orders based on the determined parameters such as lot size, stop loss and take profit levels.
  • GetCommentForOrder/GetSizeLot/GetTakeProfitBuy/GetTakeProfitSell(): Used to retrieve the values that will be used when a new trade is opened, such as the comment, lot size, take profit level etc.

In essence, this script is a simple automated trading system that aims to identify trends using moving averages, open trades in the direction of those trends (or against them if reversed logic is set), protect profits with a trailing stop, and close trades if profit drops significantly. All based on user-defined parameters.

Orders Execution
Checks for the total of open ordersIt Closes Orders by itself It can change open orders parameters, due to possible stepping strategyIt automatically opens orders when conditions are reached
2 Views
0 Downloads
0 Favorites

Profitability Reports

AUD/USD Oct 2024 - Jan 2025
357.00 %
Total Trades 1908
Won Trades 0
Lost trades 0
Win Rate 0.00 %
Expected payoff 0.72
Gross Profit 1898.00
Gross Loss -531.70
Total Net Profit 1366.30
-100%
-50%
0%
50%
100%
GBP/USD Oct 2024 - Jan 2025
300.00 %
Total Trades 3754
Won Trades 3744
Lost trades 10
Win Rate 1.00 %
Expected payoff 0.66
Gross Profit 3744.00
Gross Loss -1248.30
Total Net Profit 2495.70
-100%
-50%
0%
50%
100%
NZD/USD Oct 2024 - Jan 2025
295.00 %
Total Trades 1468
Won Trades 1458
Lost trades 10
Win Rate 0.99 %
Expected payoff 0.66
Gross Profit 1458.00
Gross Loss -494.80
Total Net Profit 963.20
-100%
-50%
0%
50%
100%
escape2reversed-2-maxorders
//+------------------------------------------------------------------+
//|                                                      robotic.mq4 |
//|                                    Copyright © 2008, OGUZ BAYRAM |
//|                                            es_cape77@hotmail.com |
//+------------------------------------------------------------------+
extern int       iTakeProfitCloseValue=30;
extern int       iTakeProfitMaxDecCount=30; 
extern int       maxtrades=10;

static bool      bTakeProfitPrevious=-1;
static int       iTakeProfitDecraeseCount=0;
static int       iTakeProfitMaxValue=-1;
extern double lTakeProfit = 10;
extern double sTakeProfit = 10;
extern double lTrailingStop = 15;
extern double sTrailingStop = 15;
extern color clOpenBuy = Blue;
extern color clCloseBuy = Aqua;
extern color clOpenSell = Red;
extern color clCloseSell = Violet;
extern color clModiBuy = Blue;
extern color clModiSell = Red;
extern string Name_Expert = "Robotic";
extern int Slippage = 1;
extern bool UseSound = false;

extern bool FractionalPips = true;
extern string NameFileSound = "Alert.wav";
extern double Lots = 0.1;
extern double StopLoss=100.0;

extern bool reverseLogic = true;
int magic_number = 013113324124;

void deinit() {
    Comment("");
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start(){

    double SL = StopLoss;
    int totalOrderCount=OrdersTotal();
    for(int pos=0;pos<totalOrderCount;pos++)
    {
        if( OrderSelect(pos,SELECT_BY_POS)==false ) continue;
        //orderý seçtik þu an
        if (OrderSymbol() == Symbol()) //bu satýr sadece ea'yý attýðýnýz grafiðin sembolündeki para ile açýlan emirleriniz üzerinde iþlem yapmak için konuldu
        { 
            if ( OrderProfit() > 0 )
            {


                //TAKE PROFÝT DÜÞMEYE BAÞLARSA KAPAT
                //eðer kârdaysak ve peþpeþe iTakeProfitMaxDecCount sayýsýndan daha çok düþüþ yaþamýþsak, (TP: 100, 90, 80, 70 gibi, burada 4 kez düþüþ oldu demektir) pozisyonu hiç gözünün yaþýna bakmadan kapatýr
                //fakat kapatabilmek için birde istenilen minimum deðeri geçmiþmi bakýyorum hesabý þöyle (Profit > iTakeProfitCloseValue * 7.0) isterseniz bu kýsýtý kaldýrýn if'den 
                
                if (OrderProfit()> iTakeProfitMaxValue)
                iTakeProfitMaxValue = OrderProfit();

                if (bTakeProfitPrevious > OrderProfit())
                iTakeProfitDecraeseCount = iTakeProfitDecraeseCount + 1;
                else if (bTakeProfitPrevious < OrderProfit())
                {
                    iTakeProfitDecraeseCount = iTakeProfitDecraeseCount - 1;
                    if (iTakeProfitDecraeseCount<0)
                    iTakeProfitDecraeseCount = 0;
                }
                //Print(Symbol()," TPCount: ",iTakeProfitDecraeseCount);
                bTakeProfitPrevious = OrderProfit();         
                
                if (( iTakeProfitMaxDecCount <= iTakeProfitDecraeseCount) && (OrderProfit() >= (iTakeProfitCloseValue * 7.0))  )
                {
                    bool cticket;
                    Print(Symbol()," P:",Period()," take profit ",iTakeProfitDecraeseCount," kez düþtü kapattýk. Fiyat:",Ask);
                    /*if ( OrderType() == OP_BUY )
            {  
                    Print(Symbol()," P:",Period()," take profit ",iTakeProfitDecraeseCount," kez düþtü kapattýk. Fiyat:",Ask);
                    cticket = OrderClose(OrderTicket(),OrderLots(),Ask,3,Yellow);                    
            }
            if ( OrderType() == OP_SELL )
            {  
                    Print(Symbol()," P:",Period()," take profit ",iTakeProfitDecraeseCount," kez düþtü kapattýk. Fiyat:",Bid);
                    cticket = OrderClose(OrderTicket(),OrderLots(),Bid,3,Yellow);                    
            }*/

                    //yeni close iþlemi
                    double Price=OrderOpenPrice();       
                    int Ticket=OrderTicket();         
                    double Lot=OrderLots();           

                    //artýk pozisyonu kapatmayý kafaya koyduk hemen kapatýyoruz ama bazen broker kapatmýyor istediðimiz yerden, 
                    //onun için 7 kez peþ peþe deniyoruz
                    int AttemptCount=0;
                    while(true)                                 
                    {
                        switch(OrderType())                       
                        {
                        case 0: double Price_Cls=Bid;
                            string Text="Buy ";       
                            break;                    
                        case 1: Price_Cls=Ask;       
                            Text="Sell ";             
                        }
                        //Print("Kapatmaya çalýþýyoruz ",Text," ",Ticket);
                        bool Ans=OrderClose(Ticket,Lot,Price_Cls,2);

                        if (Ans==true)                            // kapantý
                        {
                            Print("Kapattýk :) ",Text," ",Ticket," Attemp: ",AttemptCount);
                            break;                                 //while'ý kýrýyoruz
                        }

                        //hata var tekrar deneyelim
                        Sleep(300);                
                        RefreshRates();   
                        AttemptCount++;  
                        if (AttemptCount > 7) break;       
                        continue;                  
                    }//while
                }//kapatma if'inin sonu







                //BURALAR STOP LOSS AYAR ÝÞLEMLERÝ 
                //SL YOKSA KOYARMI BÝLMÝYORUM DENEMEDÝM :)), 
                //BURASI SL'yi eðer kârda ise pozisyon daha iyi yere taþýr sürekli olarak, böylece sert dönüþlerde daha az zarar görmemize yarar
                int temp = -1;
                if (OrderType() == OP_BUY)
                {
                    double ftemp = SL;               
                    if (Digits > 4)
                    {  
                        ftemp = ftemp*MathPow(100,(Digits-4));//  
                    } else {
                        ftemp = ftemp*MathPow(100,(4-Digits));//                    
                    }
                    
                    if ( OrderStopLoss() < (Bid-ftemp*Point) )
                    {
                        OrderModify(OrderTicket(),OrderOpenPrice(),Bid-ftemp*Point,OrderTakeProfit(),0,Blue);
                    }
                    
                    temp = GetLastError();
                    if (temp>0)
                    {
                        Print(Symbol()," P: ",Period(),", ORDER DEÐÝÞTÝ HATA - SL: ", Bid-ftemp*Point," Err: ",temp);
                    }            
                } else {
                    double ftemp2 = SL;
                    if (Digits > 4)
                    {  
                        ftemp2 = ftemp2*MathPow(100,(Digits-4));//  
                    } else {
                        ftemp2 = ftemp2*MathPow(100,(4-Digits));//                    
                    }
                    
                    
                    if (OrderStopLoss() > ( Ask+ftemp2*Point ))
                    OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ftemp2*Point,OrderTakeProfit(),0,Blue);
                    
                    temp = GetLastError();
                    if (temp>0)
                    {
                        Print(Symbol()," P: ",Period(),", ORDER DEÐÝÞTÝ HATA - SL:", Ask+ftemp2*Point," Err: ",temp);
                    }
                }//if orderType
                
            }//if orderprofit
        }//if ordersymbol
    }//for
    if(Bars<100){
        Print("bars less than 100");
        return(0);
    }
    if (Digits==3 || Digits==5)

    if(lTakeProfit<1){
        Print("TakeProfit less than 1");
        return(0);
    }
    if(sTakeProfit<1){
        Print("TakeProfit less than 1");
        return(0);
    }

    double diClose0=iClose(NULL,5,0);
    double diMA1=iMA(NULL,5,5,0,MODE_SMA,PRICE_OPEN,1);
    double diClose2=iClose(NULL,5,0);
    double diMA3=iMA(NULL,5,4,0,MODE_SMA,PRICE_OPEN,1);

    if(AccountFreeMargin()<(1000*Lots)){
        Print("We have no money. Free Margin = ", AccountFreeMargin());
        return(0);
    }
    if (!ExistPositions()){

        if ((diClose0<diMA1)){
            if (reverseLogic) OpenSell();
            else OpenBuy();
        }

        if ((diClose2>diMA3)){
            if (reverseLogic) OpenBuy();
            else OpenSell();
        }
    }
    TrailingPositionsBuy(lTrailingStop);
    TrailingPositionsSell(sTrailingStop);
    return (0);
}

bool ExistPositions() {
    for (int i=maxtrades-1; i<OrdersTotal(); i++) {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
            if (OrderSymbol()==Symbol()) {
                return(True);
            }
        } 
    } 
    return(false);
}
void TrailingPositionsBuy(int trailingStop) { 
    for (int i=maxtrades-1; i<OrdersTotal(); i++) { 
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { 
            if (OrderSymbol()==Symbol()) { 
                if (OrderType()==OP_BUY) { 
                    if (Bid-OrderOpenPrice()>trailingStop*Point) { 
                        if (OrderStopLoss()<Bid-trailingStop*Point) 
                        ModifyStopLoss(Bid-trailingStop*Point); 
                    } 
                } 
            } 
        } 
    } 
} 
void TrailingPositionsSell(int trailingStop) { 
    for (int i=maxtrades-1; i<OrdersTotal(); i++) { 
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { 
            if (OrderSymbol()==Symbol()) { 
                if (OrderType()==OP_SELL) { 
                    if (OrderOpenPrice()-Ask>trailingStop*Point) { 
                        if (OrderStopLoss()>Ask+trailingStop*Point || 
                                OrderStopLoss()==0)  
                        ModifyStopLoss(Ask+trailingStop*Point); 
                    } 
                } 
            } 
        } 
    } 
} 
void ModifyStopLoss(double ldStopLoss) { 
    bool fm;
    fm = OrderModify(OrderTicket(),OrderOpenPrice
    (),ldStopLoss,OrderTakeProfit(),0,CLR_NONE); 
    //if (fm && UseSound) PlaySound(NameFileSound); 
} 

void OpenBuy() { 
    double ldLot, ldStop, ldTake; 
    string lsComm; 
    ldLot = GetSizeLot(); 
    ldStop = 0; 
    ldTake = GetTakeProfitBuy(); 
    lsComm = GetCommentForOrder(); 
    OrderSend(Symbol(),OP_BUY,ldLot,Ask,Slippage,ldStop,ldTake,lsComm,magic_number,0,clOpenBuy); 
    //if (UseSound) PlaySound(NameFileSound); 
} 
void OpenSell() { 
    double ldLot, ldStop, ldTake; 
    string lsComm; 

    ldLot = GetSizeLot(); 
    ldStop = 0; 
    ldTake = GetTakeProfitSell(); 
    lsComm = GetCommentForOrder(); 
    OrderSend(Symbol(),OP_SELL,ldLot,Bid,Slippage,ldStop,ldTake,lsComm,magic_number,0,clOpenSell); 
    //if (UseSound) PlaySound(NameFileSound); 
} 
string GetCommentForOrder() { return(Name_Expert); } 
double GetSizeLot() { return(Lots); } 
double GetTakeProfitBuy() { return(Ask+lTakeProfit*Point); } 
double GetTakeProfitSell() { return(Bid-sTakeProfit*Point); } 

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