Log in or register to download unlimited Forex robots!
PSAR - (Tested with over $3,100,000 profit)
//+------------------------------------------------------------------+
//| EA-PSAR_v1-0.mq4 |
//| Luca Spinello |
//|
//+------------------------------------------------------------------+
#property copyright "Luca Spinello - mql4tradingautomation.com"
#property version "1.00"
#property strict
#property description "This Expert Advisor opens orders when the PSAR changes from above to below the price or vice versa"
#property description " "
#property description "DISCLAIMER: This code comes with no guarantee, you can use it at your own risk"
#property description "We recommend to test it first on a Demo Account"
/*
ENTRY BUY: PSAR changes from above the previous bar to below the current bar
ENTRY SELL: PSAR changes from below the previous bar to above the current bar
EXIT: Take profit or trailing stop using PSAR
*/
extern double LotSize=0.1; //Position size
extern double StopLoss=20; //Stop loss in pips
extern double TakeProfit=500; //Take profit in pips
extern int Slippage=2; //Slippage in pips
extern bool TradeEnabled=true; //Enable trade
extern double PSARStep=0.2; //PSAR Step
extern double PSARMaxStep=0.02; //PSAR Max Step
extern int MagicNumber=11223344; //Magic Number to assign to the orders
//Functional variables
double ePoint; //Point normalized
bool CanOrder; //Check for risk management
bool CanOpenBuy; //Flag if there are buy orders open
bool CanOpenSell; //Flag if there are sell orders open
int OrderOpRetry=10; //Number of attempts to perform a trade operation
int SleepSecs=3; //Seconds to sleep if can't order
int MinBars=60; //Minimum bars in the graph to enable trading
//Functional variables to determine prices
double MinSL;
double MaxSL;
double TP;
double SL;
double Spread;
int Slip;
//Variable initialization function
void Initialize(){
RefreshRates();
ePoint=Point;
Slip=Slippage;
if (MathMod(Digits,2)==1){
ePoint*=10;
Slip*=10;
}
TP=TakeProfit*ePoint;
SL=StopLoss*ePoint;
CanOrder=TradeEnabled;
CanOpenBuy=true;
CanOpenSell=true;
}
//Check if orders can be submitted
void CheckCanOrder(){
if( Bars Print("INFO - Not enough Bars to trade");
CanOrder=false;
}
OrdersOpen();
return;
}
//Check if there are open orders and what type
void OrdersOpen(){
for( int i = 0 ; i < OrdersTotal() ; i++ ) {
if( OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) == false ) {
Print("ERROR - Unable to select the order - ",GetLastError());
break;
}
if( OrderSymbol()==Symbol() && OrderType() == OP_BUY) CanOpenBuy=false;
if( OrderSymbol()==Symbol() && OrderType() == OP_SELL) CanOpenSell=false;
}
return;
}
//Close all the orders of a specific type and current symbol
void CloseAll(int Command){
double ClosePrice=0;
for( int i = 0 ; i < OrdersTotal() ; i++ ) {
if( OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) == false ) {
Print("ERROR - Unable to select the order - ",GetLastError());
break;
}
if( OrderSymbol()==Symbol() && OrderType()==Command) {
if(Command==OP_BUY) ClosePrice=Bid;
if(Command==OP_SELL) ClosePrice=Ask;
double Lots=OrderLots();
int Ticket=OrderTicket();
for(int j=1; j<OrderOpRetry; j++){
bool res=OrderClose(Ticket,Lots,ClosePrice,Slip,Red);
if(res){
Print("TRADE - CLOSE - Order ",Ticket," closed at price ",ClosePrice);
break;
}
else Print("ERROR - CLOSE - error closing order ",Ticket," return error: ",GetLastError());
}
}
}
return;
}
//Open new order of a given type
void OpenNew(int Command){
RefreshRates();
double OpenPrice=0;
double SLPrice;
double TPPrice;
if(Command==OP_BUY){
OpenPrice=Ask;
SLPrice=OpenPrice-SL;
TPPrice=OpenPrice+TP;
}
if(Command==OP_SELL){
OpenPrice=Bid;
SLPrice=OpenPrice+SL;
TPPrice=OpenPrice-TP;
}
for(int i=1; i<OrderOpRetry; i++){
int res=OrderSend(Symbol(),Command,LotSize,OpenPrice,Slip,NormalizeDouble(SLPrice,Digits),NormalizeDouble(TPPrice,Digits),"",MagicNumber,0,Green);
if(res){
Print("TRADE - NEW - Order ",res," submitted: Command ",Command," Volume ",LotSize," Open ",OpenPrice," Slippage ",Slip," Stop ",SLPrice," Take ",TPPrice);
break;
}
else Print("ERROR - NEW - error sending order, return error: ",GetLastError());
}
return;
}
//Technical analysis of the indicators
bool CrossToOpenBuy=false;
bool CrossToOpenSell=false;
void CheckPSARCross(){
CrossToOpenBuy=false;
CrossToOpenSell=false;
double PSARCurr=iSAR(Symbol(),0,PSARStep,PSARMaxStep,0);
double PSARPrev=iSAR(Symbol(),0,PSARStep,PSARMaxStep,1);
if(PSARCurr<Close[0] && PSARPrev>Close[1]){
CrossToOpenBuy=true;
}
if(PSARCurr>Close[0] && PSARPrev<Close[1]){
CrossToOpenSell=true;
}
}
//Trailing Stop with PSAR
void UpdatePositions(){
//Scan the open orders backwards
for(int i=OrdersTotal()-1; i>=0; i--){
//Select the order, if not selected print the error and continue with the next index
if( OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) == false ) {
Print("ERROR - Unable to select the order - ",GetLastError());
continue;
}
//Check if the order can be modified matching the criteria, if criteria not matched skip to the next
if(OrderSymbol()!=Symbol()) continue;
if(OrderMagicNumber()!=MagicNumber) continue;
//Prepare the prices
double TakeProfitPrice=OrderTakeProfit();
double StopLossPrice=OrderStopLoss();
double OpenPrice=OrderOpenPrice();
double NewStopLossPrice=StopLossPrice;
double NewTakeProfitPrice=TakeProfitPrice;
//PSAR Value of the current symbol, current time frame , PSARStep, PSARMaxStep, previous candle
double PSARPrice=iSAR(Symbol(),0,PSARStep,PSARMaxStep,1);
//Get updated prices and calculate the new Stop Loss and Take Profit levels, these depends on the type of order
RefreshRates();
if(OrderType()==OP_BUY){
if(PSARPrice>StopLossPrice && PSARPrice<Close[1] && PSARPrice<TakeProfitPrice){
NewStopLossPrice=NormalizeDouble(PSARPrice,Digits);
}
}
if(OrderType()==OP_SELL){
if(PSARPriceClose[1] && PSARPrice>TakeProfitPrice){
NewStopLossPrice=NormalizeDouble(PSARPrice,Digits);
}
}
//If the new Stop Loss and Take Profit Levels are different from the previous then I try to update the order
if(NewStopLossPrice!=StopLossPrice){
Print("Modifying order ",OrderTicket()," Open Price ",OpenPrice," New Stop Loss ",NewStopLossPrice," New Take Profit ",NewTakeProfitPrice);
if(OrderModify(OrderTicket(),OpenPrice,NewStopLossPrice,NewTakeProfitPrice,0,Yellow)){
Print("Order modified");
}
else{
Print("Order failed to update with error - ",GetLastError());
}
}
}
}
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
//Calling initialization, checks and technical analysis
Initialize();
CheckCanOrder();
UpdatePositions();
CheckPSARCross();
//Check of Entry/Exit signal with operations to perform
if(CrossToOpenBuy){
CloseAll(OP_SELL);
if(CanOpenBuy && CanOrder) OpenNew(OP_BUY);
}
if(CrossToOpenSell){
CloseAll(OP_BUY);
if(CanOpenSell && CanOrder) OpenNew(OP_SELL);
}
}
//+------------------------------------------------------------------+
Hi, thanks for sharing.
I updated this EA and I added an automatic lot size manager, which automatically grows the trading lot size as the trading balance is growing. Each time the robot makes a profit its starts trading with a bigger lot size. The profit talks for itself!
I made a lot of changes and tested this Forex robot on a real STP account!
Please look at what I got.
We tested on: FXOpen Broker!
IMPORTANT! Use the below button to open an FXOpen wallet to get leverage up to 500!
WARNING! If you are not using the below button to open a new FXOpen wallet, then you may not get leverage up to 500!
If you are using this Forex robot on any other forex broker, then you may have to find your own settings, because provided settings not working with all brokers.
We tested on super-fast Forex VPS! It's highly recommended for 24/5 automated trading!
Deposit: $500
Leverage: 1:500
The test time: 3 months.
Total trades: 49
Average trades per month: 16
Total profit: $3,180,360
I tested on the real account!
Note: We made this test for you, to give you a starting point. You should always make your own test.
Have a good trend and the biggest profit!
For detailed test information, please download the files below!
This test showed that this EA has potential. But all traders himself must optimize the EA on his account with many backtests and forward tests.
If you have any questions about this test you can contact me via email on my MT4talk profile page, at https://mt4talk.com/misc.php?email=25379
NOTE: Only MT4talk PRO members can contact me via email.
gu m30 d500 p3.1M ea-par v1.0 mod1.htm 37.61 kb, 129 downloads since 2020-07-07
gu m30 d500 p3.1M ea-par v1.0 mod1.set 1.35 kb, 119 downloads since 2020-07-07
- We are testing robots on FBS Forex broker!
- We are testing robots on FXopen accounts!
- We are testing robots on LQDFX accounts!
- Total number of registered users: 77,580
- Registered users today: 5
- Newest registered user: mkrdOvems
- Total number of topics: 11,777
- Total number of posts: 38,456
Online users: 2,339 guests, 92 Members:
admin, Alex Pierre Torras, Alrowad Gate, Asbu, azfxtrade, Baagia Kusuma Suryadi, Biren, Bitson Mahoney, Brasky4eva, brunox, BUNDER, circusdjay, Cleidivan Ramos, Coiner, cowboy25, CTThisani, curleyjoel, Daniel Higgins, Davo6789, ddeliberato, diversanta, dmb trading, Donovan Sissing, edwinses, ela, Ema144, emmie789, Emmy, ez251158, fastlane2021, flairandflowers, Fraser, gohang, goleon8, Gun Gun Gunawan, harrydapel, hgmt4, hhh45, IamSolomonChika, Investor, Jilles Maes, josidd, Justin Schmitgen, Kanaimba Ua Lucky, khunudom, Kingbill2, kjrajchennai, KYM, Lamboz-Cashpot Worldwide, limevanilla, lob68, Lumfor64liz, m217irr, Marvin Tacdoy Bao-et, Massimo Casiglia, Mauricio Adriano de Castro, Mendocino, Mike419, Miroslav Hányš, mkrdOvems, Mokgobi, moneyjolt, mt4talk001, naushad1976, neagoelaur, nilocrasta, oberasbacher, Oupas25, pigboy, povvke, Purgeaudio, Raiikou Idrissi, Raja Rabbani Janjua, Rosecharity40, sasastephe, Sibu, Simone Cik Cicala, skinvestor1978, Sniperxss, sonel, spark2023, SUKMILKY1959, Thakurb, tskabilan, Unclemo95, vrkvinayagam, xv16, Xxsticsxx, Zo, Zoltan0013, zorbafx69, 西伯利亚风
The content on the MT4talk website is created by its users (MT4talk forum members). MT4talk does not sell Forex robots and does not offer support for them. MT4talk only offer PRO membership which allows for unlimited downloads of content from any forum topic or post. The updates for Forex robots may be limited or not happen at all, depending on who created the robot.
We are testing Forex robots in real-life conditions! We use a demo account to test some of the robots and the results are still accurate. We are not financial advisors and cannot advise you to invest your money. Our aim is to find good market analysis solutions using different strategies that can benefit our community.
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 or the MT4talk EA Tester Team 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.
Affiliates Disclaimer - The website may have links to partner websites, and if you sign up and trade through these links, we will receive a commission. Our affiliate partners are FXOpen, FBS, LQDFX, and MyForexVPS.
Copyright MT4talk.com Forum Rules - Privacy Policy.