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);
}
}
//+------------------------------------------------------------------+
Join the MT4talk Telegram channel: https://t.me/MT4talkchannel
Join the MT4talk Telegram group: https://t.me/+XcwLRi9oFOJhYjlk
Watch videos from the MT4talk YouTube channel.
https://www.youtube.com/@MT4talkForexForum/videos
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!
gu m30 d500 p3.1M ea-par v1.0 mod1.htm 37.61 kb, 144 downloads since 2020-07-07
gu m30 d500 p3.1M ea-par v1.0 mod1.set 1.35 kb, 132 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!
Why don't many people post their daily winning results?
MT4talk PRO members can Turn off MT4talk daily winning result post requirements for $49.99 / month. More info...
Latest profit posts from the Trade Executor EA users.
By using the MT4talk website, you automatically agree to the Forum Rules & Terms of Use, as well as the terms below.
Everything you see on the MT4talk website is created by its users, mainly the members of the MT4talk forum.
What is MT4talk?
MT4talk is an online Forex forum with over 5000 Forex robots and over 3000 Forex indicators uploaded by forum members in the last 10 years, available to download from forum posts. The Uploaded file does not come with support.
The website doesn't sell Forex robots and doesn't provide support for the ones you download. MT4talk offers a PRO membership, allowing you to download unlimited files from forum posts. Even though the site usually doesn't provide support for downloaded Forex robots, if you're new to Forex and need help, you can buy the MT4talk dedicated support membership from the MT4talk forum. The MT4talk Dedicated support subscription is only available for purchase for MT4talk PRO members.
The MT4talk Team also provides an Artificial Intelligence Forex robot called "MT4talk Forex AI Signal - Trade Executor EA" to PRO members. However, this Forex robot is only a bonus and is not included in the original PRO membership.
Updates for the Forex robots may be limited or nonexistent, depending on the creator. If you choose to download any Forex robot or setting file from the forum, you acknowledge that you are using it at your own risk. MT4talk PRO membership is a digital product. Therefore, after you complete the PRO membership purchase, there is no refund available!
We are conducting real-life tests on Forex robots to assess their performance. For certain robots, we may use a demo account to conduct tests, and for other Forex robots, we may use a real Forex account. It's essential to recognize that we are not financial advisors and cannot provide investment guidance. Our objective is to discover effective market analysis solutions through testing various strategies, which could be beneficial to 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.