Izham87
Active Member
- Messages
- 1,198
- Joined
- Jul 14, 2016
- Messages
- 1,198
- Reaction score
- 528
- Points
- 81
Salam semua..
EA ni dibuat atas dasar suka2 dan atas dasar semangat belajar coding mql4. bukan nak digunakan kat real akaun.
Algo EA ni:
1. bukak buy&sell serentak dengan tp yang boleh set, katakan 10 pip.
2. bila salah satu post hit tp, katakan sell hit tp, maka tp buy akan diadjust ke breakeven + spread.
3. position buy tadi akan dibiarkan dan pada masa yang sama selepas sell hit tp tadi, buy&sell serentak akan dilakukan lagi dengan tp 10 pip.
so, dengan ini, post akan sentiasa close dalam profit. equity akan bertambah, dalam masa sama float = pertambahan profit. macam tak guna la..
(EA tak guna ni untuk educational purpose je tau)
nama EA ni ThreeDemons sebab yang menyebabkan equity kurang dalam EA ni ada 3 bende/demons:
1. Spread
2. Swap
3. Slippage
Code EA seperti di bawah (untuk 5-decimal broker):
EA ni dibuat atas dasar suka2 dan atas dasar semangat belajar coding mql4. bukan nak digunakan kat real akaun.
Algo EA ni:
1. bukak buy&sell serentak dengan tp yang boleh set, katakan 10 pip.
2. bila salah satu post hit tp, katakan sell hit tp, maka tp buy akan diadjust ke breakeven + spread.
3. position buy tadi akan dibiarkan dan pada masa yang sama selepas sell hit tp tadi, buy&sell serentak akan dilakukan lagi dengan tp 10 pip.
so, dengan ini, post akan sentiasa close dalam profit. equity akan bertambah, dalam masa sama float = pertambahan profit. macam tak guna la..
nama EA ni ThreeDemons sebab yang menyebabkan equity kurang dalam EA ni ada 3 bende/demons:
1. Spread
2. Swap
3. Slippage
Code EA seperti di bawah (untuk 5-decimal broker):
Code:
//+------------------------------------------------------------------+
//| ThreeDemons.mq4 |
//| Copyright 2017, Izham87 |
//| https://www.Izham87.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, Izham87"
#property link "https://www.Izham87.com"
#property version "1.00"
#property strict
#include <stderror.mqh>
#include <stdlib.mqh>
extern double TP = 100;
extern double Lot = 0.01;
extern int MagicNumber = 77;
int lastbuyticket = 0;
int lastsellticket = 0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
**
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
**
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(subTotalTrade()==0)
subDoubleDose();
else
{
//check lastbuy ticket
if(OrderSelect(lastbuyticket,SELECT_BY_TICKET)==true && OrderCloseTime()>0)
subModifyOrder(lastsellticket);
else
Print("OrderSelect lastbuyticket returned the error of ",GetLastError());
//check lastsell ticket
if(OrderSelect(lastsellticket,SELECT_BY_TICKET)==true && OrderCloseTime()>0)
subModifyOrder(lastbuyticket);
else
Print("OrderSelect lastsellticket returned the error of ",GetLastError());
**
**
//+------------------------------------------------------------------+
void subModifyOrder(int ticketmodify)
{
double takeprofit=0;
if(OrderSelect(ticketmodify,SELECT_BY_TICKET)==true)
{
if(OrderType()==OP_BUY)
takeprofit=OrderOpenPrice()+(Ask-Bid);
else
takeprofit=OrderOpenPrice()-(Ask-Bid);
bool res=OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),takeprofit,0,CLR_NONE);
if(!res)
Print("Error in OrderModify. Error code=",GetLastError());
else
{
Print("Order modified successfully.");
subDoubleDose();
**
**
else
Print("OrderSelect ticketmodify returned the error of ",GetLastError());
**
//+------------------------------------------------------------------+
void subDoubleDose()
{
int ticket;
ticket = subOpenOrder(OP_SELL, Symbol(), Lot);
subCheckError(ticket, "SELL");
lastsellticket=ticket;
ticket = subOpenOrder(OP_BUY, Symbol(), Lot);
subCheckError(ticket, "BUY");
lastbuyticket=ticket;
**
//+------------------------------------------------------------------+
int subOpenOrder(int type, string symbol, double openlot)
{
int
ticket = 0,
err = 0,
c = 0;
double
aStopLoss = 0,
aTakeProfit = 0,
bStopLoss = 0,
bTakeProfit = 0;
aTakeProfit = NormalizeDouble(Ask+TP*Point(),(int)Digits);
bTakeProfit = NormalizeDouble(Bid-TP*Point(),(int)Digits);
if(type==OP_BUY)
{
for(c=0;c<10;c++)
{
ticket=OrderSend(symbol,OP_BUY,openlot,Ask,5,aStopLoss,aTakeProfit,"",MagicNumber,0);
err=GetLastError();
if(err==0)
{
if(ticket>0) break;
**
else
{
if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
{
Sleep(5000);
continue;
**
else //normal error
{
if(ticket>0) break;
**
**
**
**
if(type==OP_SELL)
{
for(c=0;c<10;c++)
{
ticket=OrderSend(symbol,OP_SELL,openlot,Bid,5,bStopLoss,bTakeProfit,"",MagicNumber,0);
err=GetLastError();
if(err==0)
{
if(ticket>0) break;
**
else
{
if(err==0 || err==4 || err==136 || err==137 || err==138 || err==146) //Busy errors
{
Sleep(5000);
continue;
**
else //normal error
{
if(ticket>0) break;
**
**
**
**
return(ticket);
**
void subCheckError(int ticket, string Type)
{
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
{
Print(Type + " order opened : ",OrderOpenPrice());
**
else Print("Error opening " + Type + " order : (",GetLastError(),") ", ErrorDescription(GetLastError()));
**
**
//-----------------------
int subTotalTrade()
{
int cnt;
int total = 0;
for(cnt=0;cnt<OrdersTotal();cnt++)
{
if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)==true){
if(OrderType()<=OP_SELL &&
OrderMagicNumber()==MagicNumber) total++;**
**
return(total);
**
