#property show_inputs
#include lt; WinUser32.mqhgt;
#include lt; stdlib.mqhgt;
#define NL \ n
#define highline Nomor putaran tinggi berikutnya
#define highlinetradetrigger Berikutnya beli pemicu perdagangan
#define lowline Nomor putaran rendah berikutnya
#define lowlinetradetrigger Berikutnya menjual pemicu perdagangan


/*
membatalkan DisplayUserFeedback ()
mulai()

---- Fungsi perdagangan ----
membatalkan LookForTradingOpportunity ()
bool SendSingleTrade (tipe int, komentar string, lotsize ganda, harga ganda, pemberhentian ganda, TP ganda, sihir int)
bool DoesTradeExist ()

---- Matt's Order Kode perpustakaan yang andal
bool O_R_CheckForHistory (int ticket) Cheers Matt, Anda seorang bintang.
membatalkan O_R_Sleep (double mean_time, double max_time)

*




extern string bs = ---- Hal-hal dasar ----;
extern Lot ganda = 0,01;
extern int MagicNumber = 615046;
extern string TradeComment = Angka bulat;
extern bool CriminalIsECN = false;
extern int TradeTriggerPips = 15;
extern bool ReverseTradeDirection = false;
extern bool TakeFirstTrade = true;
extern string tpsl = ---- Stop loss ----;
extern int StopLoss = 100;
extern string TSL = ---- Trailing stop loss ----;
extern int TrailingStopPips = 15;
extern int BreakEvenProfitPips = 1;
extern string trs = ---- Peluang dan tujuan ----;
extern int DisplayGapSize = 30;
extern bool DeleteLinesOnExit = true;
extern double bprice = 1.3480;
extern double sprice = 1.3460;
double sl = 20;
TP ganda = 20;




//Barang-barang O-R Matt
int O_R_Setting_max_retries = 10;
double O_R_Setting_sleep_time = 4.0;* detik *
double O_R_Setting_sleep_max = 15.0;* detik *


//Angka bulat
ganda RoundNumberHigh, RoundNumberHighTrigger;
ganda RoundNumberLow, RoundNumberLowTrigger;

//Barang lainnya
string ScreenMessage, Gap;
bool RobotDisabled;
string Pesan Dinonaktifkan;
int Spread;


membatalkan DisplayUserFeedback ()
{
ScreenMessage =;

ScreenMessage = StringConenate (ScreenMessage, Gap, NL);
ScreenMessage = StringConenate (ScreenMessage, Gap, Lot size =, Lot, NL);
ScreenMessage = StringConenate (ScreenMessage, Gap, Stop loss =, StopLoss, NL);
ScreenMessage = StringConenate (ScreenMessage, Gap, Magic number =, MagicNumber, NL);
spread ganda = MarketInfo (Symbol (), MODE_SPREAD);
ScreenMessage = StringConenate (ScreenMessage, Gap, Spread =, spread, NL);

ScreenMessage = StringConenate (ScreenMessage, NL);
Komentar (ScreenMessage);


}/membatalkan DisplayUserFeedback ()


// ----------------------------------------------- -------------------
//| fungsi inisialisasi pakar |
// ----------------------------------------------- -------------------

int init ()
{

pengganda int;
if (Digit == 2 || Digit == 4) multiplier = 1;
if (Digit == 3 || Digit == 5) multiplier = 10;
if(Digits == 6) multiplier = 100;
if(Digits == 7) multiplier = 1000;

TradeTriggerPips * = pengganda;
StopLoss * = pengganda;
BreakEvenProfitPips * = pengganda;



Gap =;
if (DisplayGapSize gt;0)
{
untuk (int cc = 0; cc; Ukuran Layar; c )
{
Gap = StringConenate (Gap,);
}
}



Komentar (......... Menunggu tanda centang);
mulai();

}

// ----------------------------------------------- -------------------
//| fungsi deinitialisasi pakar |
// ----------------------------------------------- -------------------

int deinit ()
{


Komentar();

}



bool DoesTradeExist ()
{
//Pencarian untuk perdagangan terbuka


if (OrdersTotal () == 0) return (false);/tidak ada hubungannya
bool found = false;

untuk (int cc = OrdersTotal () - 1; cc gt; = 0; cc--)
{
if (! OrderSelect (cc, SELECT_BY_POS)) melanjutkan;
if (OrderMagicNumber () == MagicNumber OrderSymbol () == Symbol ())
{
ditemukan = benar;


if (OrderProfit () gt; 0) TrailingStopLoss ();
}
}


kembali (ditemukan);

}/Akhiri bool DoesTradeExist ()



bool SendSingleTrade (tipe int, komentar string, lotsize ganda, harga ganda, sl ganda, TP ganda, sihir int
{



int slippage = 10;
if (Digits == 3 || Digits == 5) slippage = 100;

warna col = Merah;
if (type == OP_BUY || type == OP_BUYSTOP) col = Green;

int expiry = 0;
//if (SendPendingTrades) kedaluwarsa = TimeCurrent () (PendingExpiryMinutes * 60);


if (! CriminalIsECN) int ticket = OrderSend (Symbol (), ketik, lotsize, harga, slippage, sl, TP, komentar, sihir, kedaluwarsa, col);


//Adalah penjahat 2 tahap
if (CriminalIsECN)
{
ticket = OrderSend (Symbol (), type, lotsize, price, slippage, 0, 0, comment, magic, expiry, col);
if (sl! = 0)
{
jika (tiket gt; 0)
hasil kotor = OrderModify (tiket, OrderOpenPrice (), sl, TP, 0, CLR_NONE);
jika (! hasil)
{
int err = GetLastError ();
Cetak (Simbol (),, jenis, modifikasi pesanan SL gagal dengan kesalahan (, err,):, ErrorDescription (err));
}//if (!result)
}/jika (Sl! = 0)


}/jika (CriminalIsECN)

//Terjebak kesalahan untuk keduanya
if (ticket lt; 0)
{
tipe string;
if (type == OP_BUY) stype = OP_BUY;
if (type == OP_BUYSTOP) stype = OP_BUYSTOP;
if (type == OP_SELL) stype = OP_SELL;
if (type == OP_SELLSTOP) stype = OP_SELLSTOP;
err = GetLastError ();
Peringatan (Simbol (),, stype, Pengiriman pesanan EA manual gagal karena kesalahan (, err,):, ErrorDescription (err));
Cetak (Simbol (),, stype, Pengiriman pesanan EA manual gagal karena kesalahan (, err,):, ErrorDescription (err));
return (false);
}/jika (tiket lt; 0)

//Pastikan perdagangan telah muncul dalam sejarah platform untuk menghindari perdagangan duplie
O_R_CheckForHistory (tiket);

//Sudah sejauh ini, jadi pengiriman dagang berhasil
return (true);


}/End bool SendSingleTrade (tipe int, komentar string, lotsize ganda, harga ganda, pemberhentian ganda, TP ganda)



//MULAI LOGIK PERDAGANGAN/

membatalkan LookForTradingOpportunity ()
{

if (IsTradeContextBusy() ) return;

double sl, TP;
RefreshRates ();
hasil bool;


dobel MinStop = MarketInfo (Symbol (), MODE_STOPLEVEL) * Titik;


if (! ReverseTradeDirection)
{
//Panjang

if (Bid gt; = price)
{


if (TakeFirstTrade)
{
//Perdagangan pertama dengan tp
hasil = salah;
sementara (hasil == salah)
{
if (StopLoss gt; 0) sl = NormalalizeDouble (Ask - (StopLoss * Point), Digit);

hasil = SendSingleTrade (OP_BUY, TradeComment, Lot, Ask, sl, TP, MagicNumber);
}/while (result = false)
}/jika (TakeFirstTrade)


}/



//Pendek
//if (Bid lt; = lo Buka [0] gt; lo lo gt; 0)
if (Bid lt; = price)
{


if (TakeFirstTrade)
{
//Perdagangan pertama dengan tp
hasil = salah;
sementara (! hasil)
{
if (StopLoss gt; 0) sl = NormalalizeDouble (Bid (StopLoss * Point), Digit);
hasil = SendSingleTrade (OP_SELL, TradeComment, Lot, Bid, sl, TP, MagicNumber);
}/Sementara (! Hasil)
}/jika (TakeFirstTrade)


}/if (Bid lt; = lo Buka [1] gt; lo lo gt; 0)
}/if (! ReverseTradeDirection)


}/batal LookForTradingOpportunity ()
//AKHIR LOGIK PERDAGANGAN/


Saya mendapatkan kesalahan 130 Berhenti tidak valid, di mana saya bisa salah ??

ketika saya mengatur extern int StopLoss = 0; semuanya baik-baik saja dalam hal pesanan dipe kecuali bahwa tidak ada nilai tp atau sl dimasukkan bersama dengan pesanan.