You didn't post a topic yet. Let us show you how to make your first topic and upload your favorite forex robot. Guide me

Skip to forum content

Quick Login / Register with Facebook Account!

Login with Facebook

Login with Username and Password!

     Username:       Password:  Login

Register  |  Forgot Password?

 

The latest topics with attached files (Forex robots, Forex Indicators, etc..)

Forums in this category with details of Replies, Views, last post

EURUSD RFX- 1MIN

by ftoncu.bim

FOREX EA

by rossolebile

My forex ea

by pilililo2

SWB stealth v1.01 EA

by Zahid Frx

Hide

Highest Forex Leverage 1:3000!

Try your Forex Robot with with the highest leverage 1:3000!

All Forex robot strategies allowed! Scalping, hedging, martingale, etc...



Search options (Page 2 of 39)

Moving → ► MT4talk - FREE Forex Robots and more... → Search results

Pages Previous 1 2 3 4 39 Next

Perform new search

Posts found: 11 to 20 of 385

UPDATE: I made the levels update on each new candle so now it runs as it should.  I should note,though, that I wanted to do this with either ObjectSet or ObjectMove, but for now I am just deleting and redrawing each line on each new candle.  I have also added a DeInt function to properly remove the indicator after it is removed. The issue I mentioned before about multiple versions of this same indicator being used during expert testing was a mistake in the EA and not this indicator, so no worries there. I also think the slowness of the tests is an issue with the EA and not this indicator. I have also cleaned out a lot of the unnecessary code used for testing to make it slightly easier to read. One exception to this is measuring the direction bias (“DirBias”) of a trend based on the RVI values.  This is a feature that has not been built out yet.

Anyway, I think this custom indicator is pretty much complete except for a few possible changes here and there.  I think I will stop providing updates since I will be moving on to another portion of the overall project. I hope this helps some trader out there trying to tackle a similar problem.  Please feel free to use this code as your own, as a whole or in part. And if you are a beginner and have any questions specifically related to this indicator, please feel free to contact me. 

Final Note: While this indicator has performed well overall during my testing, I will have a much more experienced MQL4 programmer look over my code before I go live and I strongly suggest you do the same.  This is the first indicator I customized and I barely put any effort into error handling. Don’t lose money because of my laziness - do your due diligence!

i want a divergence convergence EA with moving average signalling

//+------------------------------------------------------------------+
//                        DO NOT DELETE THIS HEADER
//             DELETING THIS HEADER IS COPYRIGHT INFRIGMENT 
//
//                   Copyright ©2017, https://mt4talk.com
//                     MT4talk Expert Advisor Generator
//                        https://mt4talk.com/eagenerator/
//
// THIS EXPERT ADVISOR (EA) HAS BEEN GENERATED USING MT4talk EA GENERATOR. 
// 
// Disclaimer: This EA is provided to you "AS-IS", and MT4talk disclaims any warranty
// or liability obligations to you of any kind. 
//
// FREE EA LICENSE
// This EA is provided to you for free of charge! You can share this EA on any website or any forums. 
//
// CFTC RULE 4.41
// HYPOTHETICAL OR SIMULATED PERFORMANCE RESULTS HAVE CERTAIN LIMITATIONS. UNLIKE AN ACTUAL PERFORMANCE RECORD, SIMULATED 
// RESULTS DO NOT REPRESENT ACTUAL TRADING. ALSO, SINCE THE TRADES HAVE NOT BEEN EXECUTED, THE RESULTS MAY HAVE UNDER-OR-
// OVER COMPENSATED FOR THE IMPACT, IF ANY, OF CERTAIN MARKET FACTORS, SUCH AS LACK OF LIQUIDITY. SIMULATED TRADING PROGRAMS, 
// IN GENERAL, ARE ALSO SUBJECT TO THE FACT THAT THEY ARE DESIGNED WITH THE BENEFIT OF HINDSIGHT. NO REPRESENTATION IS BEING 
// MADE THAT ANY ACCOUNT WILL OR IS LIKELY TO ACHIEVE PROFIT OR LOSSES SIMILAR TO THOSE SHOWN.
//
// U.S. Government Required Disclaimer.
// Commodity Futures Trading Commission Futures and Options trading has large potential rewards, but also large potential risk. 
// You must be aware the risks and be willing to accept them in order to invest in the futures and options markets. 
// Don't trade with money you can't afford to lose. This is neither a solicitation nor an offer to Buy/Sell futures or options.
// No representation is being made that any account will or is likely to achieve profits or losses similar 
// to those discussed on this website. The past performance of any trading system or methodology is not necessarily 
// indicative of future results.
//
// USE THIS EA AT YOUR OWN RISK. 
//
//                      DO NOT DELETE THIS HEADER
//             DELETING THIS HEADER IS COPYRIGHT INFRIGMENT 
//+------------------------------------------------------------------+

#property copyright "Copyright 2017"
#property link      "https://mt4talk.com"
#property version   "1.00"
#property strict
extern double Risk=1;
extern double Break_Even=1;
extern bool Fix_SL=0;
extern double Lotsize=0.02;
extern double Take_Profit=3;
extern double Trailing_Stop=1;
extern int Magic_Number=07222509831;
extern int Max_Nr_Of_Trades=4;
extern int Max_Nr_Of_Sell_Trades=2;
extern int Max_Nr_Of_Buy_Trades=2;
extern bool Hidden=false;
extern int Martingale_Type=0;
extern bool Close_opposit_signal=true;
extern double Stop_Loss=0; 
extern bool DayFilter=false; 
extern bool TimeFilter=false;
 
double Martingale_Value=0;

bool FixSL=0;
int Money_Management=2;

int cntmartin=0;
double ts=0;
double be=0;
double sl,tp;
int mp;
datetime lasttrade;


 

 

int OnInit() 
 
{ 
    mp=1;
    if (Digits==5 || Digits==3) mp=10; 
    lasttrade=TimeCurrent();
    cntmartin=0;
    
    if (Money_Management==1)   
    {
       Stop_Loss=Stop_Loss/MarketInfo(Symbol(),MODE_TICKVALUE)/mp/Lotsize;
       Take_Profit=Take_Profit/MarketInfo(Symbol(),MODE_TICKVALUE)/mp/Lotsize;
       Break_Even=Break_Even/MarketInfo(Symbol(),MODE_TICKVALUE)/mp/Lotsize;
       Trailing_Stop=Trailing_Stop/MarketInfo(Symbol(),MODE_TICKVALUE)/mp/Lotsize;
    }

    //---
    return(INIT_SUCCEEDED);

} 

 
void OnDeinit(const int reason)
 
{} 

 
void OnTick()
{
    bool TradeAllow=false;
    bool buy_signal=false;
    bool sell_signal=false;
    double sl;
    double tp;
    double lotsize;
    
 
    buy_signal=GetSignal(OP_BUY);
    sell_signal=GetSignal(OP_SELL);
 
    //---       
    if((CloseSignal(OP_BUY)) ||
        (sell_signal && Close_opposit_signal))
    {
      CloseOrders(OP_BUY);
    }
    if((CloseSignal(OP_SELL)) ||
        (buy_signal && Close_opposit_signal))
    {
      CloseOrders(OP_SELL);
    }
 
    if((Max_Nr_Of_Trades>0 && GetNrOfTrades(6)<Max_Nr_Of_Trades)||
        Max_Nr_Of_Trades==0)
    {
        if((Max_Nr_Of_Buy_Trades>0 && GetNrOfTrades(OP_BUY)<Max_Nr_Of_Trades)||
            Max_Nr_Of_Trades==0)
        {
            if(buy_signal)
            {
                if (Money_Management==2)
                {
                    double entry;
        
                    entry=MarketInfo(Symbol(),MODE_ASK);
                    if(FixSL)
                    {    
                        sl=NormalizeDouble(entry-Stop_Loss*mp*Point(),(int)MarketInfo(Symbol(),MODE_DIGITS));     
                        Lotsize=NormalizeDouble(CalcLotsize(Symbol(),entry,sl,Risk),2);
                        tp=NormalizeDouble(entry+CalcDistance(Take_Profit,Lotsize)*mp*Point(),(int)MarketInfo(Symbol(),MODE_DIGITS)); 
                    }
                    else
                    {
                        sl=NormalizeDouble(entry-CalcDistance(Stop_Loss,Lotsize)*mp*Point(),(int)MarketInfo(Symbol(),MODE_DIGITS));     
                        tp=NormalizeDouble(entry+CalcDistance(Take_Profit,Lotsize)*mp*Point(),(int)MarketInfo(Symbol(),MODE_DIGITS)); 
                    }
                    
                }
                   
                   
                if (GetLastProfit(lotsize)<0 && Martingale_Type>0)
                {
                    Lotsize=lotsize;
                    cntmartin++;
                }
                else
                {
                    cntmartin=0;
                }
                  
                if (Martingale_Type==1)//Increment
                {
                    Lotsize+=Martingale_Value;
                }
                        
                if (Martingale_Type==2)//Multipli
                {
                     Lotsize*=Martingale_Value;
                }
                OpenOrder(OP_BUY);
            }
        }
        if((Max_Nr_Of_Sell_Trades>0 && GetNrOfTrades(OP_SELL)<Max_Nr_Of_Sell_Trades)||
            Max_Nr_Of_Sell_Trades==0)
        {
            if(sell_signal)
            {
                if (Money_Management==2)
                {
                    double entry;
                    entry=MarketInfo(Symbol(),MODE_BID);
                    if(FixSL)
                    {
                        sl=NormalizeDouble(entry+Stop_Loss*mp*Point(),(int)MarketInfo(Symbol(),MODE_DIGITS));
                        Lotsize=NormalizeDouble(CalcLotsize(Symbol(),entry,sl,Risk),2);
                        tp=NormalizeDouble(entry-CalcDistance(Take_Profit,Lotsize)*mp*Point(),(int)MarketInfo(Symbol(),MODE_DIGITS)); 
                    }
                    else
                    {
                        sl=NormalizeDouble(entry+CalcDistance(Stop_Loss,Lotsize)*mp*Point(),(int)MarketInfo(Symbol(),MODE_DIGITS));     
                        tp=NormalizeDouble(entry-CalcDistance(Take_Profit,Lotsize)*mp*Point(),(int)MarketInfo(Symbol(),MODE_DIGITS)); 
                    }
                }
                
                
                if (GetLastProfit(lotsize)<0 && Martingale_Type>0)
                {
                    Lotsize=lotsize;
                    cntmartin++;
                }
                else
                {
                    cntmartin=0;
                }
                  
                if (Martingale_Type==1)//Increment
                {
                    Lotsize+=Martingale_Value;
                }
                        
                if (Martingale_Type==2)//Multipli
                {
                     Lotsize*=Martingale_Value;
                }
                OpenOrder(OP_SELL);
            }
        }
    }
}
       
 
 
bool GetSignal(int type)
{
    bool b=false;
     
 
    if(type==OP_BUY)
    {
 
            if(iMACD(Symbol(),0,0,0,9,0,0,0)<iVolume(Symbol(),0,0))
            {
               b=true;
            }
        } 
 
    if(type==OP_SELL)
    {
            if(iMACD(Symbol(),0,0,0,9,0,0,0)>iVolume(Symbol(),0,0))
            {
               b=true;
            }
        } 
 
    return(b);
} 
 
bool CloseSignal(int type)
{
    bool b=false;
     
 
    return(b);
}
 
void OpenOrder(int type)
{
   int ticket=-1;
   int err=0;
  
    if(type==OP_BUY)
    {
        ticket = OrderSend(Symbol(), OP_BUY, Lotsize, MarketInfo(Symbol(), MODE_ASK), 10, 0, 0,"", Magic_Number);       
        if(ticket<0)
        {
            err=GetLastError();
            //Print ('Error!. Cannot Open BUY, failed with error : ',err);
        }
        else
        {
            if(Money_Management<2)
            {
                sl=NormalizeDouble(MarketInfo(Symbol(), MODE_ASK)-Stop_Loss*mp*MarketInfo(Symbol(),MODE_POINT), MarketInfo(Symbol(),MODE_DIGITS));
                tp=NormalizeDouble(MarketInfo(Symbol(), MODE_ASK)+Take_Profit*mp*MarketInfo(Symbol(),MODE_POINT), MarketInfo(Symbol(),MODE_DIGITS));
            }
            OrderModify(ticket, MarketInfo(Symbol(), MODE_ASK), sl, tp,0);//open price=MarketInfo(Symbol(), MODE_ASK)
        }
    }

    if(type==OP_SELL)
    {
        ticket = OrderSend(Symbol(), OP_BUY, Lotsize, MarketInfo(Symbol(), MODE_BID), 10, 0, 0,"", Magic_Number);       
        if(ticket<0)
        {
            err=GetLastError();
            //Print ('Error!. Cannot Open BUY, failed with error : ',err);
        }
        else
        {
            if(Money_Management<2)
            {
                sl=NormalizeDouble(MarketInfo(Symbol(), MODE_BID)+Stop_Loss*mp*MarketInfo(Symbol(),MODE_POINT), MarketInfo(Symbol(),MODE_DIGITS));
                tp=NormalizeDouble(MarketInfo(Symbol(), MODE_BID)-Take_Profit*mp*MarketInfo(Symbol(),MODE_POINT), MarketInfo(Symbol(),MODE_DIGITS));
            }
            OrderModify(ticket, MarketInfo(Symbol(), MODE_BID), sl, tp,0);//open price=MarketInfo(Symbol(), MODE_ASK)
        }
    }
}
 
void CloseOrders(int type)
{
   int total  = OrdersTotal();
   for (int i = total-1 ; i >=0 ; i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && 
        OrderMagicNumber() == Magic_Number && 
        OrderSymbol() == Symbol() && 
        type==OrderType()) 
        {
            switch(OrderType())
            {
                case OP_BUY:
                {
                    OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),10);
                    break;  
                }
                                  
                case OP_SELL:
                {
                    OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),10);
                    break;
                }
            }             
        }
    }
}
 
bool IsNewBar()
{
    if (lasttrade<iTime(Symbol(),0,0))
    {
        lasttrade=iTime(Symbol(),0,0);
        return (true);
    }
    return (false);
}
int GetNrOfTrades(int type)
{
   int t=0;
   
   int total = OrdersTotal();
   int count;
   if(type==OP_BUY || type==OP_SELL)
   {
       for(count = total - 1; count >= 0; count--)
       {
          if(!OrderSelect(count, SELECT_BY_POS, MODE_TRADES)) continue;
          if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number && OrderType()==type)
          {
             t++;
          }
       }
       return (t);
   }
   else if(type==6)
   {
       for(count = total - 1; count >= 0; count--)
       {
          if(!OrderSelect(count, SELECT_BY_POS, MODE_TRADES)) continue;
          if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number)
          {
             t++;
          }
       }
       return (t);
   }
   return(t);
}
    
 
double CalcLotsize(string symbol,double entry, double sl,double risk)
{
   
   double qty,riskm,dist; 
   dist=MathAbs(entry-sl)/MarketInfo(symbol,MODE_POINT);
   riskm=AccountBalance()*risk/100;
   
   qty=riskm/(dist*MarketInfo(symbol,MODE_TICKVALUE));  
   return( NormalizeDouble(qty,2) );
}
    
 
void Trailing(double Trailing_Stop)
{
  int err;
   double sl = 0;
   bool result;
   
   //
   sl = OrderStopLoss();
   if(OrderType() == OP_BUY)
   {
      if((MarketInfo(Symbol(),MODE_BID) > (OrderOpenPrice() + Trailing_Stop*mp*MarketInfo(Symbol(),MODE_POINT))) )
      {                        
         
         if(OrderStopLoss() == 0) sl = MarketInfo(Symbol(),MODE_BID) - Trailing_Stop*mp*MarketInfo(Symbol(),MODE_POINT);
         if(OrderStopLoss() != 0 && MarketInfo(Symbol(),MODE_BID) >= OrderStopLoss() + Trailing_Stop*mp*MarketInfo(Symbol(),MODE_POINT)) sl = MarketInfo(Symbol(),MODE_BID) - Trailing_Stop*mp*MarketInfo(Symbol(),MODE_POINT);
         while(IsTradeContextBusy()) Sleep(100);
         if(sl > OrderStopLoss())
         {
            ResetLastError();
            result = OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(sl, MarketInfo(Symbol(),MODE_DIGITS)), OrderTakeProfit(), 0, CLR_NONE);
            //
            if (result)
            {               
               Print("Trailing Stop updated: #", OrderTicket(), "; SL = ", DoubleToStr(OrderStopLoss(), MarketInfo(Symbol(),MODE_DIGITS)), "; Bid = ", DoubleToStr(MarketInfo(Symbol(),MODE_BID), MarketInfo(Symbol(),MODE_DIGITS)));
            }
            else
            {
               err = GetLastError();
               Print("Error!. Trailing Stop #", OrderTicket(), " order modify failed with error(",err,")");
            }
         }
      }
   }//if(OrderType() == OP_BUY)
   //
   if(OrderType() == OP_SELL)
   {
      
      if((MarketInfo(Symbol(),MODE_ASK) < (OrderOpenPrice() - Trailing_Stop*mp*MarketInfo(Symbol(),MODE_POINT))))
      {
         
         if(OrderStopLoss() == 0) sl = MarketInfo(Symbol(),MODE_ASK) + (Trailing_Stop*mp)*MarketInfo(Symbol(),MODE_POINT);
         if(OrderStopLoss() != 0 && MarketInfo(Symbol(),MODE_ASK) <= OrderStopLoss() - Trailing_Stop*mp*MarketInfo(Symbol(),MODE_POINT)) sl = MarketInfo(Symbol(),MODE_ASK) + (Trailing_Stop*mp)*MarketInfo(Symbol(),MODE_POINT);
         while(IsTradeContextBusy()) Sleep(100);
         if(sl < OrderStopLoss())
         {
            ResetLastError();
            result = OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(sl, MarketInfo(Symbol(),MODE_DIGITS)), OrderTakeProfit(), 0, CLR_NONE);
            //
            if (result)
            {
               Print("Trailing Stop updated: #", OrderTicket(), "; SL = ", DoubleToStr(sl, MarketInfo(Symbol(),MODE_DIGITS)), "; Ask = ", DoubleToStr(MarketInfo(Symbol(),MODE_ASK), MarketInfo(Symbol(),MODE_DIGITS)));
            }
            else
            {
               err = GetLastError();
               Print("Error!. Trailing Stop #", OrderTicket(), " order modify failed with error(",err,")");
            }
         }
      }
   }
}
    
 
void ManageTrades()
{
   int t=OrdersTotal();
   for(int i=t-1;i>=0;i--)
   {
      if(OrderSelect(i,SELECT_BY_POS))
      {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number)
         {
            if (!Hidden)
            {
                if (Money_Management==2)
                {
                    ts=CalcDistance(Trailing_Stop,OrderLots());//OrderLots
                    be=CalcDistance(Break_Even,OrderLots()); 
                }
                else
                {
                    ts=Trailing_Stop;
                    be=Break_Even;
                }
                
                if (Break_Even>0)
                {
                    BreakEven(be);
                }
                if (Trailing_Stop>0)
                {
                    Trailing(ts);
                }
            }
           
         
         }
      }
   }//for end
}
    
 
    
void BreakEven(double Break_Even)
{
   bool result;
   double sl;
   int err;
   //
   ResetLastError();
   if(OrderType() == OP_BUY)
   {
       if(OrderStopLoss() >= OrderOpenPrice()) return;
       
       if (MarketInfo(Symbol(),MODE_BID) >= OrderOpenPrice() + Break_Even*mp*MarketInfo(Symbol(),MODE_POINT))
       {
         sl= OrderOpenPrice() ;
         while(IsTradeContextBusy()) Sleep(100);
         result = OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(sl, MarketInfo(Symbol(),MODE_DIGITS)), OrderTakeProfit(), 0, CLR_NONE);
         if (result)
         {
            Print("Break Even stop updated: #", OrderTicket(), "; SL = ", DoubleToStr(sl, MarketInfo(Symbol(),MODE_DIGITS)), "; Bid = ", DoubleToStr(MarketInfo(Symbol(),MODE_BID), MarketInfo(Symbol(),MODE_DIGITS)));
         }
         else
         {
            err = GetLastError();
            Print("Error!. Break Even #", OrderTicket(), " order modify failed with error(",err,")");
         }
       }
   }
   //
   if (OrderType() == OP_SELL) 
   {
       if (OrderStopLoss() <= OrderOpenPrice() && OrderStopLoss() != 0) return;
       
       if (MarketInfo(Symbol(),MODE_ASK) <= OrderOpenPrice() - Break_Even*mp*MarketInfo(Symbol(),MODE_POINT))
       {
         sl = OrderOpenPrice() ;
         while(IsTradeContextBusy()) Sleep(100);
         result = OrderModify(OrderTicket(),OrderOpenPrice(), NormalizeDouble(sl, MarketInfo(Symbol(),MODE_DIGITS)), OrderTakeProfit(), 0, CLR_NONE);
         if (result)
         {           
            Print("Break Even stop updated: # ", OrderTicket(), "; SL = ", DoubleToStr(sl, MarketInfo(Symbol(),MODE_DIGITS)), "; Ask = ", DoubleToStr(MarketInfo(Symbol(),MODE_ASK), MarketInfo(Symbol(),MODE_DIGITS)));
         }
         else
         {
            err = GetLastError();
            Print("Error!. Break Even #", OrderTicket(), " order modify failed with error(",err,")");
         }
       }
   }
}
    
 
double CalcDistance(double risk, double lotsize)
{
   risk=AccountBalance()*risk/100;
   return (risk/MarketInfo(Symbol(),MODE_TICKVALUE)/mp/lotsize);
}

 
double GetLastProfit(double& lotsize)
{
   int t=OrdersTotal();
   double p=0;
   datetime mt=0;
   
   for (int i=t-1;i>=0;i--)
   {
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number && OrderCloseTime()>mt)
         {
            mt=OrderCloseTime();
            p=OrderProfit();
            lotsize=OrderLots();
         }
      }
   }
   
   return (p);
}

what SMA is all about ?

SMA is Simple Moving Average,
imagine that you have a graph with X and y coordinates,
the X is the Time and the Y is the Price of pair.
SMA is the average of the prices of the pair in the period that you want.
SMA in general is a very popular indicator,
a lot of time we are checking if the SMA of short period is crossing the SMA of long period from the bottom,
when it does we should buy Longs position,
and if the SMA of short period is crossing the SMA of long period  from the top
we should buy Longs position.

it is very basic idea and you can and need to manipulate this but is is good basic.
use your knowlage very carefully and on your own risk.

happy trading.

based on exponential moving average. One is period of 48 and other 18

//+------------------------------------------------------------------+
//                        DO NOT DELETE THIS HEADER
//             DELETING THIS HEADER IS COPYRIGHT INFRIGMENT 
//
//                   Copyright ©2017, https://mt4talk.com
//                     MT4talk Expert Advisor Generator
//                        https://mt4talk.com/eagenerator/
//
// THIS EXPERT ADVISOR (EA) HAS BEEN GENERATED USING MT4talk EA GENERATOR. 
// 
// Disclaimer: This EA is provided to you "AS-IS", and MT4talk disclaims any warranty
// or liability obligations to you of any kind. 
//
// FREE EA LICENSE
// This EA is provided to you for free of charge! You can share this EA on any website or any forums. 
//
// CFTC RULE 4.41
// HYPOTHETICAL OR SIMULATED PERFORMANCE RESULTS HAVE CERTAIN LIMITATIONS. UNLIKE AN ACTUAL PERFORMANCE RECORD, SIMULATED 
// RESULTS DO NOT REPRESENT ACTUAL TRADING. ALSO, SINCE THE TRADES HAVE NOT BEEN EXECUTED, THE RESULTS MAY HAVE UNDER-OR-
// OVER COMPENSATED FOR THE IMPACT, IF ANY, OF CERTAIN MARKET FACTORS, SUCH AS LACK OF LIQUIDITY. SIMULATED TRADING PROGRAMS, 
// IN GENERAL, ARE ALSO SUBJECT TO THE FACT THAT THEY ARE DESIGNED WITH THE BENEFIT OF HINDSIGHT. NO REPRESENTATION IS BEING 
// MADE THAT ANY ACCOUNT WILL OR IS LIKELY TO ACHIEVE PROFIT OR LOSSES SIMILAR TO THOSE SHOWN.
//
// U.S. Government Required Disclaimer.
// Commodity Futures Trading Commission Futures and Options trading has large potential rewards, but also large potential risk. 
// You must be aware the risks and be willing to accept them in order to invest in the futures and options markets. 
// Don't trade with money you can't afford to lose. This is neither a solicitation nor an offer to Buy/Sell futures or options.
// No representation is being made that any account will or is likely to achieve profits or losses similar 
// to those discussed on this website. The past performance of any trading system or methodology is not necessarily 
// indicative of future results.
//
// USE THIS EA AT YOUR OWN RISK. 
//
//                      DO NOT DELETE THIS HEADER
//             DELETING THIS HEADER IS COPYRIGHT INFRIGMENT 
//+------------------------------------------------------------------+

#property copyright "Copyright 2017"
#property link      "https://mt4talk.com"
#property version   "1.00"
#property strict
extern double Lotsize=0.1;
extern double Stop_Loss=10;
extern double Take_Profit=20;
extern double Trailing_Stop=2;
extern int Magic_Number=12345;
extern bool Hidden=false;
extern int Martingale_Type=0;
extern bool Close_opposit_signal=true;
extern int Max_Nr_Of_Trades=0;
extern int Max_Nr_Of_Buy_Trades=0;
extern int Max_Nr_Of_Sell_Trades=0; 
extern bool DayFilter=false; 
extern bool TimeFilter=false;
 
double Risk=0;

double Martingale_Value=0;

bool FixSL=0;
int Money_Management=0;

int cntmartin=0;
double ts=0;
double be=0;
double sl,tp;
int mp;
datetime lasttrade;


 

 

int OnInit() 
 
{ 
    mp=1;
    if (Digits==5 || Digits==3) mp=10; 
    lasttrade=TimeCurrent();
    cntmartin=0;
    
    if (Money_Management==1)   
    {
       Stop_Loss=Stop_Loss/MarketInfo(Symbol(),MODE_TICKVALUE)/mp/Lotsize;
       Take_Profit=Take_Profit/MarketInfo(Symbol(),MODE_TICKVALUE)/mp/Lotsize;
       Break_Even=Break_Even/MarketInfo(Symbol(),MODE_TICKVALUE)/mp/Lotsize;
       Trailing_Stop=Trailing_Stop/MarketInfo(Symbol(),MODE_TICKVALUE)/mp/Lotsize;
    }

    //---
    return(INIT_SUCCEEDED);

} 

 
void OnDeinit(const int reason)
 
{} 

 
void OnTick()
{
    bool TradeAllow=false;
    bool buy_signal=false;
    bool sell_signal=false;
    double sl;
    double tp;
    double lotsize;
    
 
    buy_signal=GetSignal(OP_BUY);
    sell_signal=GetSignal(OP_SELL);
 
    //---       
    if((CloseSignal(OP_BUY)) ||
        (sell_signal && Close_opposit_signal))
    {
      CloseOrders(OP_BUY);
    }
    if((CloseSignal(OP_SELL)) ||
        (buy_signal && Close_opposit_signal))
    {
      CloseOrders(OP_SELL);
    }
 
    if(buy_signal)
    {
        if (Money_Management==2)
        {
            double entry;
        
            entry=MarketInfo(Symbol(),MODE_ASK);
            if(FixSL)
            {    
                sl=NormalizeDouble(entry-Stop_Loss*mp*Point(),(int)MarketInfo(Symbol(),MODE_DIGITS));     
                Lotsize=NormalizeDouble(CalcLotsize(Symbol(),entry,sl,Risk),2);
                tp=NormalizeDouble(entry+CalcDistance(Take_Profit,Lotsize)*mp*Point(),(int)MarketInfo(Symbol(),MODE_DIGITS)); 
            }
            else
            {
                sl=NormalizeDouble(entry-CalcDistance(Stop_Loss,Lotsize)*mp*Point(),(int)MarketInfo(Symbol(),MODE_DIGITS));     
                tp=NormalizeDouble(entry+CalcDistance(Take_Profit,Lotsize)*mp*Point(),(int)MarketInfo(Symbol(),MODE_DIGITS)); 
            }
                
        }
                   
                   
        if (GetLastProfit(lotsize)<0 && Martingale_Type>0)
        {
            Lotsize=lotsize;
            cntmartin++;
        }
        else
        {
            cntmartin=0;
        }
          
        if (Martingale_Type==1)//Increment
        {
            Lotsize+=Martingale_Value;
        }
                
        if (Martingale_Type==2)//Multipli
        {
            Lotsize*=Martingale_Value;
        }
        
        OpenOrder(OP_BUY);
    }
    if(sell_signal)
    {
        if (Money_Management==2)
        {
            double entry;
            entry=MarketInfo(Symbol(),MODE_BID);
            if(FixSL)
            {
                sl=NormalizeDouble(entry+Stop_Loss*mp*Point(),(int)MarketInfo(Symbol(),MODE_DIGITS));
                Lotsize=NormalizeDouble(CalcLotsize(Symbol(),entry,sl,Risk),2);
                tp=NormalizeDouble(entry-CalcDistance(Take_Profit,Lotsize)*mp*Point(),(int)MarketInfo(Symbol(),MODE_DIGITS)); 
            }
            else
            {
                sl=NormalizeDouble(entry+CalcDistance(Stop_Loss,Lotsize)*mp*Point(),(int)MarketInfo(Symbol(),MODE_DIGITS));     
                tp=NormalizeDouble(entry-CalcDistance(Take_Profit,Lotsize)*mp*Point(),(int)MarketInfo(Symbol(),MODE_DIGITS)); 
            }
        }
                
                
        if (GetLastProfit(lotsize)<0 && Martingale_Type>0)
        {
            Lotsize=lotsize;
            cntmartin++;
        }
        else
        {
            cntmartin=0;
        }
              
        if (Martingale_Type==1)//Increment
        {
            Lotsize+=Martingale_Value;
        }
                    
        if (Martingale_Type==2)//Multipli
        {
            Lotsize*=Martingale_Value;
        }
        OpenOrder(OP_SELL);
    }
} 
 
bool GetSignal(int type)
{
    bool b=false;
     
 
    if(type==OP_BUY)
    {
 
            if(iMA(Symbol(),0,9,0,1,1,0)>iMA(Symbol(),0,18,0,1,1,0))
            {
               b=true;
            }
        } 
 
    if(type==OP_SELL)
    {
            if(iMA(Symbol(),0,9,0,1,1,0)<iMA(Symbol(),0,18,0,1,1,0))
            {
               b=true;
            }
        } 
 
    return(b);
} 
 
bool CloseSignal(int type)
{
    bool b=false;
     
 
    if(type==OP_BUY)
    {
            if(iMA(Symbol(),0,9,0,1,1,0)<iMA(Symbol(),0,18,0,1,1,0))
            {
               b=true;
            }
        } 
 
    if(type==OP_SELL)
    {
            if(iMA(Symbol(),0,9,0,1,1,0)>iMA(Symbol(),0,18,0,1,1,0))
            {
               b=true;
            }
        } 
 
    return(b);
}
 
void OpenOrder(int type)
{
   int ticket=-1;
   int err=0;
  
    if(type==OP_BUY)
    {
        ticket = OrderSend(Symbol(), OP_BUY, Lotsize, MarketInfo(Symbol(), MODE_ASK), 10, 0, 0,"", Magic_Number);       
        if(ticket<0)
        {
            err=GetLastError();
            //Print ('Error!. Cannot Open BUY, failed with error : ',err);
        }
        else
        {
            if(Money_Management<2)
            {
                sl=NormalizeDouble(MarketInfo(Symbol(), MODE_ASK)-Stop_Loss*mp*MarketInfo(Symbol(),MODE_POINT), MarketInfo(Symbol(),MODE_DIGITS));
                tp=NormalizeDouble(MarketInfo(Symbol(), MODE_ASK)+Take_Profit*mp*MarketInfo(Symbol(),MODE_POINT), MarketInfo(Symbol(),MODE_DIGITS));
            }
            OrderModify(ticket, MarketInfo(Symbol(), MODE_ASK), sl, tp,0);//open price=MarketInfo(Symbol(), MODE_ASK)
        }
    }

    if(type==OP_SELL)
    {
        ticket = OrderSend(Symbol(), OP_BUY, Lotsize, MarketInfo(Symbol(), MODE_BID), 10, 0, 0,"", Magic_Number);       
        if(ticket<0)
        {
            err=GetLastError();
            //Print ('Error!. Cannot Open BUY, failed with error : ',err);
        }
        else
        {
            if(Money_Management<2)
            {
                sl=NormalizeDouble(MarketInfo(Symbol(), MODE_BID)+Stop_Loss*mp*MarketInfo(Symbol(),MODE_POINT), MarketInfo(Symbol(),MODE_DIGITS));
                tp=NormalizeDouble(MarketInfo(Symbol(), MODE_BID)-Take_Profit*mp*MarketInfo(Symbol(),MODE_POINT), MarketInfo(Symbol(),MODE_DIGITS));
            }
            OrderModify(ticket, MarketInfo(Symbol(), MODE_BID), sl, tp,0);//open price=MarketInfo(Symbol(), MODE_ASK)
        }
    }
}
 
void CloseOrders(int type)
{
   int total  = OrdersTotal();
   for (int i = total-1 ; i >=0 ; i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && 
        OrderMagicNumber() == Magic_Number && 
        OrderSymbol() == Symbol() && 
        type==OrderType()) 
        {
            switch(OrderType())
            {
                case OP_BUY:
                {
                    OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),10);
                    break;  
                }
                                  
                case OP_SELL:
                {
                    OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),10);
                    break;
                }
            }             
        }
    }
}
 
bool IsNewBar()
{
    if (lasttrade<iTime(Symbol(),0,0))
    {
        lasttrade=iTime(Symbol(),0,0);
        return (true);
    }
    return (false);
}
int GetNrOfTrades(int type)
{
   int t=0;
   
   int total = OrdersTotal();
   int count;
   if(type==OP_BUY || type==OP_SELL)
   {
       for(count = total - 1; count >= 0; count--)
       {
          if(!OrderSelect(count, SELECT_BY_POS, MODE_TRADES)) continue;
          if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number && OrderType()==type)
          {
             t++;
          }
       }
       return (t);
   }
   else if(type==6)
   {
       for(count = total - 1; count >= 0; count--)
       {
          if(!OrderSelect(count, SELECT_BY_POS, MODE_TRADES)) continue;
          if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number)
          {
             t++;
          }
       }
       return (t);
   }
   return(t);
}
    
 
double CalcLotsize(string symbol,double entry, double sl,double risk)
{
   
   double qty,riskm,dist; 
   dist=MathAbs(entry-sl)/MarketInfo(symbol,MODE_POINT);
   riskm=AccountBalance()*risk/100;
   
   qty=riskm/(dist*MarketInfo(symbol,MODE_TICKVALUE));  
   return( NormalizeDouble(qty,2) );
}
    
 
void Trailing(double Trailing_Stop)
{
  int err;
   double sl = 0;
   bool result;
   
   //
   sl = OrderStopLoss();
   if(OrderType() == OP_BUY)
   {
      if((MarketInfo(Symbol(),MODE_BID) > (OrderOpenPrice() + Trailing_Stop*mp*MarketInfo(Symbol(),MODE_POINT))) )
      {                        
         
         if(OrderStopLoss() == 0) sl = MarketInfo(Symbol(),MODE_BID) - Trailing_Stop*mp*MarketInfo(Symbol(),MODE_POINT);
         if(OrderStopLoss() != 0 && MarketInfo(Symbol(),MODE_BID) >= OrderStopLoss() + Trailing_Stop*mp*MarketInfo(Symbol(),MODE_POINT)) sl = MarketInfo(Symbol(),MODE_BID) - Trailing_Stop*mp*MarketInfo(Symbol(),MODE_POINT);
         while(IsTradeContextBusy()) Sleep(100);
         if(sl > OrderStopLoss())
         {
            ResetLastError();
            result = OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(sl, MarketInfo(Symbol(),MODE_DIGITS)), OrderTakeProfit(), 0, CLR_NONE);
            //
            if (result)
            {               
               Print("Trailing Stop updated: #", OrderTicket(), "; SL = ", DoubleToStr(OrderStopLoss(), MarketInfo(Symbol(),MODE_DIGITS)), "; Bid = ", DoubleToStr(MarketInfo(Symbol(),MODE_BID), MarketInfo(Symbol(),MODE_DIGITS)));
            }
            else
            {
               err = GetLastError();
               Print("Error!. Trailing Stop #", OrderTicket(), " order modify failed with error(",err,")");
            }
         }
      }
   }//if(OrderType() == OP_BUY)
   //
   if(OrderType() == OP_SELL)
   {
      
      if((MarketInfo(Symbol(),MODE_ASK) < (OrderOpenPrice() - Trailing_Stop*mp*MarketInfo(Symbol(),MODE_POINT))))
      {
         
         if(OrderStopLoss() == 0) sl = MarketInfo(Symbol(),MODE_ASK) + (Trailing_Stop*mp)*MarketInfo(Symbol(),MODE_POINT);
         if(OrderStopLoss() != 0 && MarketInfo(Symbol(),MODE_ASK) <= OrderStopLoss() - Trailing_Stop*mp*MarketInfo(Symbol(),MODE_POINT)) sl = MarketInfo(Symbol(),MODE_ASK) + (Trailing_Stop*mp)*MarketInfo(Symbol(),MODE_POINT);
         while(IsTradeContextBusy()) Sleep(100);
         if(sl < OrderStopLoss())
         {
            ResetLastError();
            result = OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(sl, MarketInfo(Symbol(),MODE_DIGITS)), OrderTakeProfit(), 0, CLR_NONE);
            //
            if (result)
            {
               Print("Trailing Stop updated: #", OrderTicket(), "; SL = ", DoubleToStr(sl, MarketInfo(Symbol(),MODE_DIGITS)), "; Ask = ", DoubleToStr(MarketInfo(Symbol(),MODE_ASK), MarketInfo(Symbol(),MODE_DIGITS)));
            }
            else
            {
               err = GetLastError();
               Print("Error!. Trailing Stop #", OrderTicket(), " order modify failed with error(",err,")");
            }
         }
      }
   }
}
    
 
void ManageTrades()
{
   int t=OrdersTotal();
   for(int i=t-1;i>=0;i--)
   {
      if(OrderSelect(i,SELECT_BY_POS))
      {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number)
         {
            if (!Hidden)
            {
                if (Money_Management==2)
                {
                    ts=CalcDistance(Trailing_Stop,OrderLots());//OrderLots
                    be=CalcDistance(Break_Even,OrderLots()); 
                }
                else
                {
                    ts=Trailing_Stop;
                    be=Break_Even;
                }
                
                if (Break_Even>0)
                {
                    BreakEven(be);
                }
                if (Trailing_Stop>0)
                {
                    Trailing(ts);
                }
            }
           
         
         }
      }
   }//for end
}
    
 
    
void BreakEven(double Break_Even)
{
   bool result;
   double sl;
   int err;
   //
   ResetLastError();
   if(OrderType() == OP_BUY)
   {
       if(OrderStopLoss() >= OrderOpenPrice()) return;
       
       if (MarketInfo(Symbol(),MODE_BID) >= OrderOpenPrice() + Break_Even*mp*MarketInfo(Symbol(),MODE_POINT))
       {
         sl= OrderOpenPrice() ;
         while(IsTradeContextBusy()) Sleep(100);
         result = OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(sl, MarketInfo(Symbol(),MODE_DIGITS)), OrderTakeProfit(), 0, CLR_NONE);
         if (result)
         {
            Print("Break Even stop updated: #", OrderTicket(), "; SL = ", DoubleToStr(sl, MarketInfo(Symbol(),MODE_DIGITS)), "; Bid = ", DoubleToStr(MarketInfo(Symbol(),MODE_BID), MarketInfo(Symbol(),MODE_DIGITS)));
         }
         else
         {
            err = GetLastError();
            Print("Error!. Break Even #", OrderTicket(), " order modify failed with error(",err,")");
         }
       }
   }
   //
   if (OrderType() == OP_SELL) 
   {
       if (OrderStopLoss() <= OrderOpenPrice() && OrderStopLoss() != 0) return;
       
       if (MarketInfo(Symbol(),MODE_ASK) <= OrderOpenPrice() - Break_Even*mp*MarketInfo(Symbol(),MODE_POINT))
       {
         sl = OrderOpenPrice() ;
         while(IsTradeContextBusy()) Sleep(100);
         result = OrderModify(OrderTicket(),OrderOpenPrice(), NormalizeDouble(sl, MarketInfo(Symbol(),MODE_DIGITS)), OrderTakeProfit(), 0, CLR_NONE);
         if (result)
         {           
            Print("Break Even stop updated: # ", OrderTicket(), "; SL = ", DoubleToStr(sl, MarketInfo(Symbol(),MODE_DIGITS)), "; Ask = ", DoubleToStr(MarketInfo(Symbol(),MODE_ASK), MarketInfo(Symbol(),MODE_DIGITS)));
         }
         else
         {
            err = GetLastError();
            Print("Error!. Break Even #", OrderTicket(), " order modify failed with error(",err,")");
         }
       }
   }
}
    
 
double CalcDistance(double risk, double lotsize)
{
   risk=AccountBalance()*risk/100;
   return (risk/MarketInfo(Symbol(),MODE_TICKVALUE)/mp/lotsize);
}

 
double GetLastProfit(double& lotsize)
{
   int t=OrdersTotal();
   double p=0;
   datetime mt=0;
   
   for (int i=t-1;i>=0;i--)
   {
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic_Number && OrderCloseTime()>mt)
         {
            mt=OrderCloseTime();
            p=OrderProfit();
            lotsize=OrderLots();
         }
      }
   }
   
   return (p);
}

15

(0 replies, posted in Upload & Download Forex Indicators)

There are four moving averages. The blank moving average is a simple 10-period moving average applied
at the average price. The 85-weighted red or mobile weighted average is applied to close. The moving average
in green it is the exponential moving average with 50 periods of the period applied to closure. Finally, the average
mobile in golden color is the exponential moving average of period 5 and applied to the average price. The arrows
I2G (colored blue / red) provide already filtered entry signals. The day of bargaining
is highlighted with a colored rectangle.

16

(0 replies, posted in Upload & Download Forex Indicators)

hello, i'm post a trend indicator based on the Hull Moving Average (HMA) with two periods. The Hull Moving Average is an improved variant of the m.a., which shows the moment of trend reversal.

17

(0 replies, posted in Upload & Download Forex Indicators)

Bullpips is a trading system for MT4, which in my opinion, sides more towards discretionary trading rather than being a mechanical trading system. This is made clear in the 14 page document outlining the trading method. Bullpips says: “you will need to work a few things for yourself which we have no control over. These include exact stop loss and profit levels…”
Where the system is mechanical is in its entry method. The system is based on the commodity channel index (CCI) and comprised of two mt4 indicators based on the CCI along with moving averages. Entry is determined by these various indicators all pointing in the same direction at the same time. This makes for a fairly clear entry method. However, it is not a method that you would necessarily have to take every trade signal although Bullpips claims it “handles ranging markets well”. The system is said to work on most forex pairs and is based on the 15 minute time frame.

Please check the following Thread on Forex Factory for News and Updates
http://www.forexfactory.com/showthread.php?t=6854
How do I make AmazingEA work?
1. Look up the time of a news event, preferably High Impact, on Forex Factory Calendar
2. Convert the news time to the equivalent time on your Broker’s platform
3. Set NYear, NMonth, NDay, NHour, NMin and NSec to what the clock on Market Watch on MT4 will say when the news hits
4. The Default Settings are adequate for testing on Demo
5. If the EA doesn't place orders check the 'Amazing EA Troubleshooter' text file, page 5 below
PointsAway - Stop Order Distance in Points
Distance above the current ask price and below the current bid price where the Stop Orders will be placed, unless CTCBN > 0. (Candles To Check Before News – see below)
If CTCBN > 0, the PointsAway distance will be added to the High and Low figure from CTCBN.
If PointsAway is set to 0, the EA will use the broker's minimum distance for Pending Orders.
PointsGap
Orders are opened initially further away so they don't trigger accidentally and moved into position SecBAO seconds before News Time. This used to be hard-coded TP 10000 but caused issues with 4-digit brokers. Please set to what is comfortable but please make it more than 1000 points.
ModifyGap
The EA modifies orders to keep the straddle positioned around current price, but each modification takes 1 or 2 seconds which is obviously much slower than price can move. ModifyGap sets the minimum distance that price has to move before generating an order modification. The idea is to stop the EA modifying orders for 0.00001 change in price, so it is ready for the larger price movements that might occur later. A value of 5 would mean EURUSD @ 1.32010 would need to be 1.32015 or 1.32005 before modifying. Set to 0 to disable.
TP - Take Profit amount in Points
When the order gets into profit this amount of Points, it will be closed automatically. Set to 0 to disable.
SL - Stop Loss amount in Points
Plus the Spread if you set AddSpreadToSL=true. Set to 0 to disable.
These following five parameters (NYear, NMonth, NDay, NHour, NMin and NSec) are the broker's date and time, not the PC's date and time.
NYear - News Year
If NYear, NMonth and NDay are all set to 0, then the EA will trade Monday to Friday day at NHour, NMin and NSec. Brokers do not allow Pending Orders to be entered over weekends.
NMonth - News Month
See Note for NYear
NDay - News Day
See Note for NYear
NHour - News Hour
NMin - News Minute
NSec - News Seconds
CTCBN - Candles To Check Before News
For determining High & Lows , when it is 1 it checks the current candle, when it is 2 it checks the current candle and the previous one. If CTCBN = 0, PointsAway is used from Bid price for Sells and Ask price for Buys. If CTCBN > 0, Pointsaway is used from the Low for Sells and High for Buys, where the Low and High are the lowest and highest price reached within the number of candles specified. Set to 1 for default, 0 to disable.
SecBPO - Seconds Before Pending Orders
How many seconds before News Time should the EA place Pending Orders. There is a trade-off here. If set too high, the pending orders may go live early. So, set this as low as possible. But if it's too low, there may not be enough time for MT4 to open the orders. Running 6 charts on 3 brokers, expect to set this to at least 60. Most traders will find the default setting of 20 adequate. This is not going to happen at the exact second specified, because EA code is executed only when a tick signal comes from the broker, but around the news price movements are frequent. If you set SecBAO, a special technique will be employed where the orders are opened 1000 points away + Pointsaway setting from current price, which allows you to open orders earlier but safely. See SecBAO setting.
SecBMO - Seconds Before Modify Orders
Once the orders are placed, the EA will follow the price movement and modify orders accordingly so that they are always the correct distance away from the current price. With some volatile news this can be quite often, so if that creates a problem with your broker you can set this to half of the value you put for SecBPO, if you put this to be equal as SecBPO than EA will not modify the orders at all. If set to 0, then the EA will keep modifying right up to the news time. Default Setting is 0.
SecBAO - Seconds Before Adjacent Orders
If you set SecBAO, a special technique will be employed where the orders are opened 'PointsGap' points away + Pointsaway setting from current price, which allows you to open orders earlier but safely. When the time reaches SecBAO seconds before the news, the orders will be moved into place. If you set this to the same value as SecBPO, the code is ignored and the EA just opens the orders at the normal distance and doesn't move them. On Demo, you may find the orders aren't moved because there aren't enough price ticks generated. In this case try setting SecBAO higher than 10. On Live, during news you may be able to set as low as 3 seconds. Default Setting is 5.
STWAN - Seconds To Wait After News
This is the timer to cancel all the orders that did not get triggered. Default Setting is 5.
OCO - Order Cancel Other
If this is set to true, when your order gets hit the corresponding opposite order will be cancelled but without waiting for STWAN time. This is only effective after News Time, not before.
BEPoints - Break Even Points
Points In profit which EA will Move SL to Break Even + BEOffset; a nice way to lock in some profit. If you leave it at 0 nothing will happen.
BEOffset - Break Even Offset
Number of points to move beyond Break Even (allows covering Broker Commissions etc.) Set to 0 to disable.
TrailPoints - Trailing Stop
Enter the amount of Points you want to trail by. If you set this to 20 points, the EA will maintain a distance of 20 points behind current price. Setting to 0 disables trailing stops.
TrailOffset - Trailing Stop Offset
Enter the amount of Points after which you want Trailing to start. Setting to 0 enables Trailing to start as soon as the trade is in profit. If you set this to 150, and TrailPoints is 50, then after 200 points in profit, your Stop will jump to 150 points and maintain a distance 5 points behind current price as long as price keeps moving in the correct direction of course.
TrailImmediate - Start Trailing Immediately
If set to true, the EA will start moving the Stop Loss even when the trade is not in profit. Only do this on brokers where the spread is kept low. If the broker is prone to spike the spread, then this will cause early stop outs. The advantage of using this is that if the news comes out as expected and the trade moves a little bit in your favour, but then reverses, you may capture a few pips.
MM - Money Management
If you set MM to true, the EA will automatically determine the number of lots for your orders, according to the risk you are willing to take
RiskPercent - The risk you are willing to take on any single order
Risk Percentage is worked out as a percentage of the available margin. The calculation now uses 2 decimal places instead of 1, which will allow the trading of micro-lots. The calculation currently now takes into account Stop Loss distance. If you set MaxSpread, then the Risk calculation will be based on Stop Loss distance + MaxSpread. However, please don't assume that is your maximum risk because brokers can and will slip stop-loss orders.
Lots - Number of Lots for your orders
If you set MM to false, than you have to tell the EA how many lots to use for the orders; so if you put here 1, every order will be placed with 1 lot
MaxSpread - The maximum spread in points you wish to allow for your orders
If the spread grows higher than this level, the EA deletes any Pending Orders and will not open new ones until the Spread lowers below this Setting for at least 5 seconds. Don't worry if your orders go live just prior to deletion, the EA will still manage them. Set to 0 to disable.
AddSpreadToSL - Whether to include the spread in Stop Loss settings
If you set AddSpreadToSL to True, then the EA will automatically add the spread to the Stop Loss, so 10 pips will actually become 10 pips plus the spread which could be 20 pips during Non Farm Payroll news release. If you set AddSpreadToSL to False, the EA will set hard stops based on this setting only, which is good for knowing your max risk etc. You can also use MaxSpread to limit the stop level required for the Spread.
AllowBuys - Whether Long Orders are allowed or not
Default is true. Set to false to disable Long Orders.
AllowSells - Whether Short Orders are allowed or not
Default is true. Set to false to disable Short Orders.
TradeLog
EA will use this to create a name for the log file. If you set this to 'AmazingEA', and use it on a EURUSD chart, the logfiles will be called 'AmazingEA-EURUSD.log'. You will find this file in the experts\files folder of your MT4 platform, with detailed explanations what took place while EA was running.
A new logging function has been added to capture EA settings in the Comment field of the trade. This is very useful because you can instantly see what settings were used on a trade in 'MyFXBook' for example without hunting through logfiles.
Because the Comment field is quite small (max length 32 characters), I have had to abbreviate everything and skip settings that can be worked out from the trade itself.
Example: P100T1000S100C1P20A5M0W5O0B50T0 - This means Pointsaway=100, TP=1000, SL=100, CTCBN=1, SecBPO=15, SecBAO=5, SecBMO=0, STWAN=5, OCO=0, BE=50, Trailing=0
Summary
So, when you attach AmazingEA to your chart and set it the way you want, it will monitor what is happening, place buy and sell orders, modify them, move hard stops to break even, trail stop them ... and do the best it can to help you make some $$$$$. Test it on demo before you go live, to make yourself comfortable with it and to see how it will interact with your broker.
A new safety function has been added to delete any pending orders when the EA is removed from the chart. However, if you disable the EA, and you have pending orders already placed, the EA will no longer adjust the straddle, with the consequence that your pending orders may go live before news time. The safest way to disable the EA is to remove it from the chart. Another quick way is to disable EAs and change the timeframe. When setting up, one should always save the settings used in a .set file - this makes it easier to setup again on the same or another broker.

Amazing EA Trouble Shooter
1. In Tools, Options, Expert Advisors, make sure you have checked 'Enable Expert Advisors' and 'Allow Live Trading'
2. Drop AmazingEA onto a chart. You should see 'AmazingEA' in the top right hand corner of the chart with a Smiley Face next to it. If there is a cross instead, go back to Step 1.
3. Click on the chart and press F7, or right-click on the chart and choose Expert Advisers, Properties.
4. Setup the various parameters for the trade.
5. In the top left corner of the chart there is a comment entitled 'Amazing Forex System Expert Advisor'
6. Near there, you can view various parameters and also compare the News Time with the Brokers Time.
7. The NYear, NMonth, NDay, NHour, NMin, NSec parameters need to correspond to your Broker’s time not your PC time. If you set a date, you need to set all three date parameters NYear, NMonth and NDay. If you don't set the date, be aware that the EA will trade every day at the relevant time set by NHour, NMin and NSec.
8. There is a hierarchy for SecBPO, SecBAO and SecBMO. SecBPO has to be greater or equal to SecBAO which has to be greater than SecBMO.
9. When the Broker Time nearly coincides with the news time, the EA will place Pending Orders. SecBPO is how many seconds before the News that the orders are placed.
10. If the pending orders are not placed, it is possible that 'Allow Live Trading' is not checked.
11. If Only Long or Only Short orders are placed, then check the Common section of the EA Properties and ensure that it is allowed to open both 'Long & Short' positions.
12. Check the 3 log files. The standard name is AmazingEA followed by the Currency Pair of the Chart, so for EURUSD it will be called 'AmazingEA-EURUSD.log'. You will find this file in the <MT4>\experts\files folder of your MT4 platform, with detailed explanations what took place while EA was running. There are 2 other log files named YYYYMMDD.log where YYYYMMDD is the current date e.g. 20130507.log. These are located in <MT4>\experts\logs and <MT4>\logs.
13. If you can't find the log files and you installed MT4 in '\Program Files\' or '\ProgramFiles (x86)\' then it is because Windows 7 or 8 prevents Applications from writing log files in the Program Files area. So then MT4 is probably writing the logs in the ProgramData directory, which is a 'hidden' directory structure. The easiest way to access that area is to open a 'Run' command and type %AppData% and press enter. You will then see a list of subdirectories. Pick the one that corresponds with the Brokers name and then look in that directory for 'experts' or 'logs'. The best thing in future is to install all MT4s in a \MT4 subdirectory, so you don't experience this issue.

i wanted to upload all kinds of indicators. i think this might be usefull for you all

Hey, I am currently customizing an RVI indicator for eventual use in an EA.  I figured it would be easier to check my work if I can actually see the results before moving on to back-testing.

The basic idea is to take the last 300 bars of the RVI (an indicator without fixed max/min's) and determine & draw lines at RviMax, RviMin, RviMid (middle), and some other calculated levels.  Essentially I want to establish a recent RVI range without changing how the indicator naturally calculates/displays. This range should update in real-time, only changing if a new max/min is established (on bar close), or if the existing max/min turns older than 300 bars.

I think I am pretty close to the desired result.  The indicator will find the MaxRVI when loaded and will display that value in the buffer correctly for all previous bars up to 300.  However after the Max/Min's the values get a little crazy.  It seems for the very recent candles (about 0-30) RviMax will be set to ANY local peak (even if clearly below the actual 300 bar max) and will continue to post lower and lower values until it reaches 0.00.  Once the RVI returns to positive territory, RviMax begins to follow RVI back up again.
 
I cannot see why the actual max/min values in the array are ignored in favor of less extreme values for the most recent bars. I suspect this has something to do with how I set up the array (RVIArray) or with how I used ArrayMaximum/ArrayMinimum, but I can't say for sure. Does anyone have any idea?

I have attached the mql4 file and picture outlining the issue.

Posts found: 11 to 20 of 385

Pages Previous 1 2 3 4 39 Next

Moving → ► MT4talk - FREE Forex Robots and more... → Search results


NOTE: Hacked or illegal versions of copyrighted Forex robots are highly prohibited on MT4talk.com. If you upload any illegal version of any copyrighted Forex robot, your forum account will be banned. No exceptions.

 

IMPORTANT: MT4talk.com is a public Forex forum, where forum members can upload open source Forex robots to share with other members. MT4talk.com forum does not sell or rent Forex robots, and does not provide guarantee or support for the uploaded Forex robots! If you have any question about any Forex robot, please open a forum topic! If you have a question about your forum account, contact: mt4talk@gmail.com

CFTC RULE 4.41 – HYPOTHETICAL OR SIMULATED PERFORMANCE RESULTS HAVE CERTAIN LIMITATIONS. UNLIKE AN ACTUAL PERFORMANCE RECORD, SIMULATED RESULTS DO NOT REPRESENT ACTUAL TRADING. ALSO, SINCE THE TRADES HAVE NOT BEEN EXECUTED, THE RESULTS MAY HAVE UNDER-OR-OVER COMPENSATED FOR THE IMPACT, IF ANY, OF CERTAIN MARKET FACTORS, SUCH AS LACK OF LIQUIDITY. SIMULATED TRADING PROGRAMS, IN GENERAL, ARE ALSO SUBJECT TO THE FACT THAT THEY ARE DESIGNED WITH THE BENEFIT OF HINDSIGHT. NO REPRESENTATION IS BEING MADE THAT ANY ACCOUNT WILL OR IS LIKELY TO ACHIEVE PROFIT OR LOSSES SIMILAR TO THOSE SHOWN.

Disclaimer - No representation is being made that any Forex account will or is likely to achieve profits or losses similar to those shown on backtests in this forum. In fact, there are frequently sharp differences between hypothetical performance results and the actual results subsequently achieved by any particular trading program. Hypothetical trading does not involve financial risk, and no hypothetical trading record can completely account for the impact of financial risk in actual trading. 
All information on this forum is for educational purposes only and is not intended to provide financial advice. Any statements posted by forum members about profits or income expressed or implied, do not represent a guarantee. Your actual trading may result in losses as no trading system is guaranteed. You accept full responsibilities for your actions, trades, profit or loss, and agree to hold the MT4talk team and forum members of this information harmless in any and all ways.


Copyright MT4talk.com Forum Rules - Privacy Policy.