Izham87
Active Member
- Messages
- 1,198
- Joined
- Jul 14, 2016
- Messages
- 1,198
- Reaction score
- 528
- Points
- 81
Code:
//+------------------------------------------------------------------+
//| BadaiMatawang.mq4 |
//| Copyright 2017, Izham Inc. |
//| [url]http://www.google.com[/url] |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, Izham Inc."
#property link "http://www.google.com"
#property version "1.00"
#property strict
#include <stderror.mqh>
#include <stdlib.mqh>
extern double percentatrisk = 0.1;
extern string pairsuffix = "";
extern double SL = 1000;
extern double TP = 2000;
extern int MagicNumber = 99;
string Pair[10] = {"USDCHF","AUDUSD","GBPUSD","GBPJPY","NZDUSD","EURJPY","AUDJPY","EURGBP","USDJPY","EURUSD"**;
extern int onceaday1=0;
extern int onceaday2=1;
int OnInit()
{
MathSrand(GetTickCount());
return(INIT_SUCCEEDED);
**
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
**
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if(StringSubstr(TimeToStr(TimeLocal(),TIME_SECONDS),0,2) == "08" && onceaday1 == 0)
{
ExecuteTrade();
onceaday1=1;
onceaday2=0;
**
if(StringSubstr(TimeToStr(TimeLocal(),TIME_SECONDS),0,2) == "22" && onceaday2 == 0)
{
onceaday1=0;
subCloseOrder();
if(subTotalTrade()>0) subCloseOrder();
if(subTotalTrade()>0) subCloseOrder();
if(subTotalTrade()==0) onceaday2=1;
**
return; // Exit start()
**
//+------------------------------------------------------------------+
void ExecuteTrade()
{
double lotvalue;
string usdexchangepair;
string sigpair, sigpairbase, sigpaircounter;
int sigaction[10]={0,0,0,0,0,0,0,0,0,0**;
int ticket;
for(int k=0;k<10;k++)
sigaction[k]=MathRand()%2;
for(int j=0;j<10;j++)
{
sigpair = StringConcatenate(Pair[j], pairsuffix);
sigpairbase = StringSubstr(Pair[j], 0, 3);
sigpaircounter = StringSubstr(Pair[j], 3, 3);
//---Calculate lot based on MM
if (sigpaircounter == "USD") {
lotvalue = NormalizeDouble((AccountFreeMargin() * percentatrisk * 0.1) / (MarketInfo(sigpair, MODE_LOTSIZE) * MarketInfo(sigpair, MODE_POINT) * SL), 2);
** else {
if (sigpaircounter == "GBP") {
lotvalue = NormalizeDouble((AccountFreeMargin() * percentatrisk * 0.1) / (MarketInfo(sigpair, MODE_LOTSIZE) * MarketInfo(sigpair, MODE_POINT) * MarketInfo(StringConcatenate("GBPUSD", pairsuffix), MODE_BID) * SL), 2);
** else {
usdexchangepair = StringConcatenate("USD", sigpaircounter, pairsuffix);
lotvalue = NormalizeDouble((AccountFreeMargin() * percentatrisk * 0.1 * MarketInfo(usdexchangepair, MODE_BID)) / (MarketInfo(sigpair, MODE_LOTSIZE) * MarketInfo(sigpair, MODE_POINT) * SL), 2);
**
**
if(lotvalue<MarketInfo(Symbol(), MODE_MINLOT))
lotvalue=MarketInfo(Symbol(), MODE_MINLOT);
if(lotvalue>MarketInfo(Symbol(), MODE_MAXLOT))
lotvalue=MarketInfo(Symbol(), MODE_MAXLOT);
//---Execute trades
if (sigaction[j] == 0) {
ticket = subOpenOrder(OP_BUY, sigpair, lotvalue);
subCheckError(ticket, "BUY");
** else {
ticket = subOpenOrder(OP_SELL, sigpair, lotvalue);
subCheckError(ticket, "SELL");
**
**
**
int subOpenOrder(int type, string symbol, double openlot)
{
int
ticket = 0,
err = 0,
c = 0;
double
aStopLoss = 0,
aTakeProfit = 0,
bStopLoss = 0,
bTakeProfit = 0;
aStopLoss = NormalizeDouble(MarketInfo(symbol,MODE_ASK)-SL*MarketInfo(symbol,MODE_POINT),(int)MarketInfo(symbol,MODE_DIGITS));
bStopLoss = NormalizeDouble(MarketInfo(symbol,MODE_BID)+SL*MarketInfo(symbol,MODE_POINT),(int)MarketInfo(symbol,MODE_DIGITS));
aTakeProfit = NormalizeDouble(MarketInfo(symbol,MODE_ASK)+TP*MarketInfo(symbol,MODE_POINT),(int)MarketInfo(symbol,MODE_DIGITS));
bTakeProfit = NormalizeDouble(MarketInfo(symbol,MODE_BID)-TP*MarketInfo(symbol,MODE_POINT),(int)MarketInfo(symbol,MODE_DIGITS));
if(type==OP_BUY)
{
for(c=0;c<10;c++)
{
ticket=OrderSend(symbol,OP_BUY,openlot,MarketInfo(symbol,MODE_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,MarketInfo(symbol,MODE_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()));
**
**
void subCloseOrder()
{
int
cnt,
total = 0,
ticket = 0,
err = 0,
c = 0;
total = OrdersTotal();
for(cnt=total-1;cnt>=0;cnt--)
{
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)==true)
{
if(OrderMagicNumber()==MagicNumber)
{
switch(OrderType())
{
case OP_BUY :
for(c=0;c<10;c++)
{
ticket=OrderClose(OrderTicket(),OrderLots(),Bid,5,Violet);
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;
**
**
**
break;
case OP_SELL :
for(c=0;c<10;c++)
{
ticket=OrderClose(OrderTicket(),OrderLots(),Ask,5,Violet);
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;
**
**
**
break;
case OP_BUYLIMIT :
case OP_BUYSTOP :
case OP_SELLLIMIT:
case OP_SELLSTOP :
break;
**
**
**
**
**
//----------------------- NUMBER OF ORDER BASE ON SYMBOL AND MAGICNUMBER FUNCTION
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);
**
Last edited: