0% found this document useful (0 votes)
20 views3 pages

Bot

This document outlines the code for a Martingale Trigger Expert Advisor in trading, which uses a strategy based on high and low prices of hourly candles. It includes functions for detecting new bars, drawing high/low lines, and managing buy/sell stop orders based on price triggers. The advisor also implements a martingale strategy to increase lot sizes after losses, aiming to recover previous losses with new trades.

Uploaded by

Zero One
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
20 views3 pages

Bot

This document outlines the code for a Martingale Trigger Expert Advisor in trading, which uses a strategy based on high and low prices of hourly candles. It includes functions for detecting new bars, drawing high/low lines, and managing buy/sell stop orders based on price triggers. The advisor also implements a martingale strategy to increase lot sizes after losses, aiming to recover previous losses with new trades.

Uploaded by

Zero One
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

//+------------------------------------------------------------------+

//| Expert Advisor: Martingale Trigger |


//+------------------------------------------------------------------+

extern double lotAwal = 0.02;


extern double tp = 5; // Take profit dalam poin penuh
extern double sl = 5; // Stop loss dalam poin penuh
extern double pemicuJarak = 2.5; // Jarak trigger dari high/low sebelumnya

double lot = lotAwal;


bool pemicu = false;
bool sudahJalanSekali = false;
int magicNumber = MathRand();
datetime waktuBarTerakhir = 0;

//+------------------------------------------------------------------+
//| Fungsi utama saat tick |
//+------------------------------------------------------------------+
void OnTick()
{

if (!pemicu)
{
if (barH1Baru())
{
gambarHiLo();
}
cekPemicuAtas();
cekPemicuBawah();
}
else
{
awasi();
}
}

//+------------------------------------------------------------------+
//| Cek apakah ada bar H1 baru |
//+------------------------------------------------------------------+
bool barH1Baru()
{
datetime waktuBarSekarang = iTime(Symbol(), PERIOD_H1, 0);
if (waktuBarSekarang != waktuBarTerakhir)
{
waktuBarTerakhir = waktuBarSekarang;
return true;
}
return false;
}

//+------------------------------------------------------------------+
//| Menggambar high low candle H1 sebelumnya |
//+------------------------------------------------------------------+
void gambarHiLo()
{
// Hapus semua objek dulu
int totalObj = ObjectsTotal();
for (int i = totalObj - 1; i >= 0; i--)
{
string namaObj = ObjectName(i);
ObjectDelete(namaObj);
}

double hi = iHigh(Symbol(), PERIOD_H1, 1);


double lo = iLow(Symbol(), PERIOD_H1, 1);

string namaHi = "GarisHi_" + TimeToStr(TimeCurrent(), TIME_SECONDS);


ObjectCreate(namaHi, OBJ_HLINE, 0, Time[0], hi);
ObjectSetInteger(0, namaHi, OBJPROP_COLOR, clrRed);
ObjectSetInteger(0, namaHi, OBJPROP_WIDTH, 1);

string namaLo = "GarisLo_" + TimeToStr(TimeCurrent(), TIME_SECONDS);


ObjectCreate(namaLo, OBJ_HLINE, 0, Time[0], lo);
ObjectSetInteger(0, namaLo, OBJPROP_COLOR, clrBlue);
ObjectSetInteger(0, namaLo, OBJPROP_WIDTH, 1);
}

//+------------------------------------------------------------------+
//| Cek pemicu Atas dari high H1 |
//+------------------------------------------------------------------+
void cekPemicuAtas()
{
double highH1 = iHigh(Symbol(), PERIOD_H1, 1);
double hargaPemicu = highH1 + pemicuJarak;

if (Bid >= hargaPemicu and Bid <= hargaPemicu+1)


{
double hargaBuyStop = hargaPemicu + pemicuJarak;
double hargaSellStop = hargaPemicu - pemicuJarak;

OrderSend(Symbol(), OP_BUYSTOP, lot, hargaBuyStop, 3, hargaBuyStop - sl,


hargaBuyStop + tp, "BuyStop", magicNumber, 0, clrGreen);
OrderSend(Symbol(), OP_SELLSTOP, lot, hargaSellStop, 3, hargaSellStop + sl,
hargaSellStop - tp, "SellStop", magicNumber, 0, clrRed);

pemicu = true;
}
}

//+------------------------------------------------------------------+
//| Cek pemicu bawah dari low H1 |
//+------------------------------------------------------------------+
void cekPemicuBawah()
{
double lowH1 = iLow(Symbol(), PERIOD_H1, 1);
double hargaPemicu = lowH1 - pemicuJarak;

if (Ask <= hargaPemicu and Ask >= hargaPemicu)


{
double hargaBuyStop = hargaPemicu + pemicuJarak;
double hargaSellStop = hargaPemicu - pemicuJarak;

OrderSend(Symbol(), OP_BUYSTOP, lot, hargaBuyStop, 3, hargaBuyStop - sl,


hargaBuyStop + tp, "BuyStop", magicNumber, 0, clrGreen);
OrderSend(Symbol(), OP_SELLSTOP, lot, hargaSellStop, 3, hargaSellStop + sl,
hargaSellStop - tp, "SellStop", magicNumber, 0, clrRed);

pemicu = true;
}
}

//+------------------------------------------------------------------+
//| Cek apakah ada order aktif (running, bukan pending) |
//+------------------------------------------------------------------+
bool adaOrderAktif()
{
for (int i = 0; i < OrdersTotal(); i++)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if ((OrderType() == OP_BUY || OrderType() == OP_SELL) &&
OrderMagicNumber() == magicNumber)
return true;
}
}
return false;
}

//+------------------------------------------------------------------+
//| Fungsi pengawasan martingale |
//+------------------------------------------------------------------+
void awasi()
{
if (!sudahJalanSekali)
{
sudahJalanSekali = true;

// Hapus semua pending order


for (int i = OrdersTotal() - 1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if ((OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP) &&
OrderMagicNumber() == magicNumber)
OrderDelete(OrderTicket());
}
}

if (adaOrderAktif())
{
double slAktif = OrderStopLoss();
double lotBaru = OrderLots() * 2;

if (OrderType() == OP_BUY)
{
OrderSend(Symbol(), OP_SELLSTOP, lotBaru, slAktif, 3, slAktif + sl,
slAktif - tp, "Sell Recovery", magicNumber, 0, clrRed);
}

if (OrderType() == OP_SELL)
{
OrderSend(Symbol(), OP_BUYSTOP, lotBaru, slAktif, 3, slAktif - sl,
slAktif + tp, "Buy Recovery", magicNumber, 0, clrGreen);
}
}
}
}

You might also like