PipMaker v1 - Price action based EA

don_forex
197
don_forex  

I will keep it simple, short and to the point. This little EA has a lot of potential. A friend of mine and I have collaborated on many different types of systems in the past. This is a culmination of our efforts. He has a very similar type of EA that is currently making 10% per month.

Here are the variables explained...

Bothways: Default is True

True - this will set a buy order if the price plus the spacing is less than the lowest buy or higher than the highest buy. Same for the sells.

False - this will set a buy order if the price plus the spacing is less than the lowest buy or a sell higher than the highest sell.

MinTime: Default is 91

This is the amount of seconds that an order must be opened before it can be closed. This is to help in preventing "scalping". If your broker has no time limitation, then you can set this to 0. Velocity4x requires 91 seconds.

Lots: Default is 0.1

Pretty self-explanatory. This is the initial lot size that is first placed. The default will depend on your account size, spacing and needs to be optimized to ensure you have a good setting. Personally, I use 0.01 for most everything.

Increment: Default is 0

This is used two different ways and is used in conjunction with Multiplier. If you are not using Multiplier (Martingale), then the setting can be anything you want the next order to increase to. In most cases, the smallest lot size one can have is 0.01, if you set the increment to anything less than 0.01 then it will take more than one order to increment to the next step. For example, 0.005 Increment will set the second order to 0.015 however, this will be rounded to 0.02, then the next order will be 0.02 and so on... If you use 0 for the setting then the subsequent orders will each be the Lots size.

If you are using Multiplier, then you must have an Increment larger than 1. I have used as low as 1.01 to as high as 5.0... This is further explained in the next variable. Optimization is necessary to determine the best Increment.

Multiplier: Default is false

This is used to determine the way in which the lotsize is incremented. When it is set to false, the Increment is stepped gradually. When it is set to true, the Increment is stepped exponentially. Using Multiplier, in effect, makes this a Martingale type system.

Conservative: Default is false

This was originally used before the advent of the profit routines now in play. How it works is, for each buy or sell order that is placed, the profit target is reduced by XX%. This way, the more orders you have open, the less profit is looked for, the quicker the orders are closed and everything is started over...

ProfitReducer: This is used in conjunction with the Conservative setting. This is what the ProfitTarget is reduced by.

ProfitTarget: Default is 50

This is a dollar amount that you determine through optimization.

Spacing: Default is 10

This is the minimum distance set between orders. Once again, optimization is recommended.

EndTrading: Default is false

This is used to stop trading once all the orders are cleared.

The only problem I have with the backtester, is that every once in awhile, the losing buys (or sells) close out before they are supposed too. According to the coding, there should only be one losing order closed at any one time. If anyone out there can help me determine why this occurs and be able to help correct it, I would be most grateful.

Over the three year Alpari history, this EA has proven to be quite profitable with the right optimizations.

Over the last two years, I have gained a lot of information and knowledge from the forums and I hope that this will be some small contribution back to the community. Enjoy and may you make lots of pips! Keep on truckin'

Don

EDIT - Version 2 fixed the closing inconsistencies.

EDIT - Version 3 - see post #23 for explanation.

EDIT - Version 4 - see post #42 for explanation.

EDIT - Version 5a Neo - see post #52 for explanation.

EDIT - Version 10 - see post #2089 for explanation.

EDIT - Version 11 - see post #2101 for explanation.

Files:
don_forex
197
don_forex  

Closing routine error

This is what I was referring to about the multiple losing order closing when they shouldn't be doing so. Keep in mind I stopped the backtest early because I got the errors I needed... That is why the drop at the end...

Files:
don_forex
197
don_forex  

Profit Potential

This is what most of the testing results look like. Obviously, this will depend on account size and optimization. Once again, notice the small step-downs where the losing orders closed out improperly. Still working on that issue.

Files:
don_forex
197
don_forex  

Martingale? Yes and No

This really is a combination of many different types of systems. It can be used many different ways. The primary difference for this EA is the close routine. Where most martingale and grid type systems close all buy or sell orders once a profit level is reached, this one takes and closes the orders that are in profit along with a losing order. This, in effect, behaves a little more along the lines of a grid system. The Multiplier (martingale) variable simply determines the rate at which the orders are incremented. Multiplied = Martingale, not Multiplied = Grid.

So, to answer your question, no, it doesn't use a Martingale strategy for MM...

Don

PS - Feel free to Skype me @ don_forex and mention the EA in the comments

Michel
476
Michel  

OrderSelect(HighestSellTicket, SELECT_BY_TICKET);

OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red);

You are closing sells on Bid prices and buys on Ask prices

don_forex
197
don_forex  
Michel:
You are closing sells on Bid prices and buys on Ask prices

So, if those were changed, do you think it would make a difference?

Don

don_forex
197
don_forex  

Changed MODE_BID & MODE_ASK

Didn't help. Any other suggestions?

Files:
Michel
476
Michel  
OrderSelect(HighestSellTicket, SELECT_BY_TICKET);

OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red);

LowestBuy=1000; HighestBuy=0;[/PHP]

You close a sell then you reset the buys params and vice versa. Is what do you want to do ?

because sometime it looks more logic :

[PHP] OrderSelect(LowestBuyTicket, SELECT_BY_TICKET);

OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red);

LowestBuy=1000; HighestBuy=0;
wolfe
1037
wolfe  

Please look at report. What do you do about all the losing trades that accumulate? These will kill your account.

Files:
pip_maker.htm  337 kb
don_forex
197
don_forex  

I think it is now fixed!

I looked at the code a little closer. When the positive orders are closed the lowest and highest variables are reset. The losing order's ticket number is reset. For example...

CloseBuysinProfit();

OrderSelect(HighestSellTicket, SELECT_BY_TICKET);

OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red);

LowestBuy=1000; HighestBuy=0;

HighestSellTicket=0;

It closed the buys in profit, LowestBuy and HighestBuy are reset. The HighestSell was closed and it was reset. That is the way it should be. There were inconsistencies with some of the combinations. I have now corrected them.

@ wolfe

You will always have orders that are open and at a loss. Nothing gets closed out until profit is made. That is why it is imperative that optimizations are done!

Then fixed version will be placed on post #1

Don

don_forex
197
don_forex  

Post your settings

I will start posting settings that will pass a three year backtest. I ask that people do the same since there is more of you than just me. Maybe somebody will hit a great combination. Any pair. TimeFrame doesn't matter. I use the 1M simply because I haven't converted to all the other TFs. Let's see what we can come up with...

Don