포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 1095

 
alvlaf :
이 코드는 MQL5로 작성되었습니까?

for (int i=0; i<SymbolCount; i++)

{

if (CountTrades() == 0) // 주문 수는 0과 같아야 합니다.

{

if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY)) ||

(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))) && MaxOpenOrders > OrdersTotal() )

// 마지막 거래가 수익성이 없으면 같은 거래가 열리지만 로트가 증가합니다.

{

유형 = TypeLastHistOrder();

if (유형 == OP_BUY) 가격 = LastAsk ;

if (유형 == OP_SELL) 가격 = LastBid ;

로트 = NormalizeDouble(LotsLastHistOrder()*승수, 2);

티켓 = OrderSend( Symbols[i] , Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0 && MaxOpenOrders > OrdersTotal() )

// 마지막 거래의 이익이 0이면 동일하게 엽니다.

{

유형 = TypeLastHistOrder();

if (유형 == OP_BUY) 가격 = LastAsk ;

if (유형 == OP_SELL) 가격 = LastBid ;

많은 = NormalizeDouble(LotsLastHistOrder(), 2);

티켓 = OrderSend( Symbols[i] , Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))

|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))

|| CountHistTrades() == 0)// 마지막 거래가 수익성이 있으면 주문이 열립니다.

{

if (SignalBuy( Symbols[i] ) && MaxOpenOrders > OrdersTotal())

{

티켓 = OrderSend( Symbols[i] , OP_BUY, lot, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

if (SignalSell( Symbols[i] ) && MaxOpenOrders > OrdersTotal())

{

티켓 = OrderSend( Symbols[i] , OP_SELL, 랏, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

}

}

}

OnTick의 단어 뒤에 코드 등... MQL4로 작성되었지만 MQL5가 필요합니까?

각 OrderSend에 대해 MaxOpenOrders 조건은 OrdersTotal()보다 크지 않아야 합니다.

프로시저 코드(OrderSymbol()==Symbol() 검사를 제거하고 Close/Open 대신 iClose()/iOpen()를 도입함)는 코드의 정확성을 검사하지 않았습니다.

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

int CountTrades(int 유형 = -1)

{

정수 cnt = 0;

(int i=OrdersTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

cnt++;

}

}

리턴(cnt);

}

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

int CountHistTrades(int 유형 = -1)

{

정수 cnt = 0;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

cnt++;

}

}

리턴(cnt);

}

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

bool SignalBuy( 문자열 Sym )

{

for (int i=1; i<=대기; i++)

{

더블 C = iClose(Sym, PERIOD_M5, i); // 여기에 원하는 시간 프레임을 지정합니다.

이중 O = iOpen(Sym, PERIOD_M5, i);

if ( C > O ) return(거짓);

}

if ((iBarShift( Sym , 0, TimeLastHistOrder()+Timeout) >= 대기 || (대기 == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))

&& CountHistTrades() > 0) return(true);

if (CountHistTrades() == 0) return(true);

반환(거짓);

}

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

bool SignalSell( 문자열 Sym )

{

for (int i=1; i<=대기; i++)

{

더블 C = iClose(Sym, PERIOD_M5, i); // 여기에 원하는 시간 프레임을 지정합니다.

이중 O = iOpen(Sym, PERIOD_M5, i);

if ( C < O ) return(거짓);

}

if ((iBarShift( Sym , 0, TimeLastHistOrder()+Timeout) >= 대기 || (대기 == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))

&& CountHistTrades() > 0) return(true);

if (CountHistTrades() == 0) return(true);

반환(거짓);

}

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

날짜/시간 TimeLastHistOrder(int 유형 = -1)

{

날짜 시간 마지막 시간 = 0;

날짜 시간 오픈 시간 = 0;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

{

if (OrderCloseTime() > 마지막 시간)

{

마지막 시간 = OrderCloseTime();

오픈타임 = 주문오픈타임();

}

}

}

}

반환(오픈 시간);

}

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

intTypeLastHistOrder()

{

날짜 시간 = 0;

정수 유형 = -1;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == 매직)

{

if (OrderCloseTime() > 시간)

{

시간 = OrderCloseTime();

유형 = 주문 유형();

}

}

}

}

반환(유형);

}

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

이중 LotLastHistOrder(int 유형 = -1)

{

날짜 시간 = 0;

이중 로트 = 0;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

{

if (OrderOpenTime() > 시간)

{

시간 = OrderOpenTime();

제비 = OrderLots();

}

}

}

}

반환(많은);

}

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

두 배 PriceCloseLastHistOrder(int 유형 = -1)

{

날짜 시간 = 0;

이중 가격 = 0;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

{

if (OrderCloseTime() > 시간)

{

시간 = OrderCloseTime();

가격 = OrderClosePrice();

}

}

}

}

반품(가격);

}

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

두 배 PriceOpenLastHistOrder(int 유형 = -1)

{

날짜 시간 = 0;

이중 가격 = 0;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

{

if (OrderCloseTime() > 시간)

{

시간 = OrderCloseTime();

가격 = OrderOpenPrice();

}

}

}

}

반품(가격);

}

 
alvlaf :

외부 intExp = 1;

티켓 = OrderSend(Symbol(), OP_SELL, 랏, 입찰가, 슬리피지, 0, 0, IntegerToString (Exp) , Magic);

이 코드가 당신을 위해 작동합니까??? 여기서 날짜는 현재 날짜보다 10분 이상 커야 합니다(예: TimeCurrent() + 최소 600).

 
A13ksandr :

for (int i=0; i<SymbolCount; i++)

{

if (CountTrades() == 0) // 주문 수는 0과 같아야 합니다.

{

if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY)) ||

(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))) && MaxOpenOrders > OrdersTotal() )

// 마지막 거래가 수익성이 없으면 같은 거래가 열리지만 로트가 증가합니다.

{

유형 = TypeLastHistOrder();

if (유형 == OP_BUY) 가격 = LastAsk ;

if (유형 == OP_SELL) 가격 = LastBid ;

로트 = NormalizeDouble(LotsLastHistOrder()*승수, 2);

티켓 = OrderSend( Symbols[i] , Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0 && MaxOpenOrders > OrdersTotal() )

// 마지막 거래의 이익이 0이면 동일하게 엽니다.

{

유형 = TypeLastHistOrder();

if (유형 == OP_BUY) 가격 = LastAsk ;

if (유형 == OP_SELL) 가격 = LastBid ;

많은 = NormalizeDouble(LotsLastHistOrder(), 2);

티켓 = OrderSend( Symbols[i] , Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))

|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))

|| CountHistTrades() == 0)// 마지막 거래가 수익성이 있으면 주문이 열립니다.

{

if (SignalBuy( Symbols[i] ) && MaxOpenOrders > OrdersTotal())

{

티켓 = OrderSend( Symbols[i] , OP_BUY, lot, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

if (SignalSell( Symbols[i] ) && MaxOpenOrders > OrdersTotal())

{

티켓 = OrderSend( Symbols[i] , OP_SELL, 랏, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

}

}

}

OnTick의 단어 뒤에 코드 등... MQL4로 작성되었지만 MQL5가 필요합니까?

각 OrderSend에 대해 MaxOpenOrders 조건은 OrdersTotal()보다 크지 않아야 합니다.

프로시저 코드(OrderSymbol()==Symbol() 검사를 제거하고 Close/Open 대신 iClose()/iOpen()를 도입함)는 코드의 정확성을 검사하지 않았습니다.

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

int CountTrades(int 유형 = -1)

{

정수 cnt = 0;

(int i=OrdersTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

cnt++;

}

}

리턴(cnt);

}

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

int CountHistTrades(int 유형 = -1)

{

정수 cnt = 0;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

cnt++;

}

}

리턴(cnt);

}

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

bool SignalBuy( 문자열 Sym )

{

for (int i=1; i<=대기; i++)

{

더블 C = iClose(Sym, PERIOD_M5, i); // 여기에 원하는 시간 프레임을 지정합니다.

이중 O = iOpen(Sym, PERIOD_M5, i);

if ( C > O ) return(거짓);

}

if ((iBarShift( Sym , 0, TimeLastHistOrder()+Timeout) >= 대기 || (대기 == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))

&& CountHistTrades() > 0) return(true);

if (CountHistTrades() == 0) return(true);

반환(거짓);

}

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

bool SignalSell( 문자열 Sym )

{

for (int i=1; i<=대기; i++)

{

더블 C = iClose(Sym, PERIOD_M5, i); // 여기에 원하는 시간 프레임을 지정합니다.

이중 O = iOpen(Sym, PERIOD_M5, i);

if ( C < O ) return(거짓);

}

if ((iBarShift( Sym , 0, TimeLastHistOrder()+Timeout) >= 대기 || (대기 == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))

&& CountHistTrades() > 0) return(true);

if (CountHistTrades() == 0) return(true);

반환(거짓);

}

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

날짜/시간 TimeLastHistOrder(int 유형 = -1)

{

날짜 시간 마지막 시간 = 0;

날짜 시간 오픈 시간 = 0;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

{

if (OrderCloseTime() > 마지막 시간)

{

마지막 시간 = OrderCloseTime();

오픈타임 = 주문오픈타임();

}

}

}

}

반환(오픈 시간);

}

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

intTypeLastHistOrder()

{

날짜 시간 = 0;

정수 유형 = -1;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == 매직)

{

if (OrderCloseTime() > 시간)

{

시간 = OrderCloseTime();

유형 = 주문 유형();

}

}

}

}

반환(유형);

}

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

이중 LotLastHistOrder(int 유형 = -1)

{

날짜 시간 = 0;

이중 로트 = 0;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

{

if (OrderOpenTime() > 시간)

{

시간 = OrderOpenTime();

제비 = OrderLots();

}

}

}

}

반환(많은);

}

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

두 배 PriceCloseLastHistOrder(int 유형 = -1)

{

날짜 시간 = 0;

이중 가격 = 0;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

{

if (OrderCloseTime() > 시간)

{

시간 = OrderCloseTime();

가격 = OrderClosePrice();

}

}

}

}

반품(가격);

}

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

두 배 PriceOpenLastHistOrder(int 유형 = -1)

{

날짜 시간 = 0;

이중 가격 = 0;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

{

if (OrderCloseTime() > 시간)

{

시간 = OrderCloseTime();

가격 = OrderOpenPrice();

}

}

}

}

반품(가격);

}

그것은 몇 가지 오류를 제공, 그것은 그것을 고칠 수 없습니다. 여기서 무슨 문제가 있습니까?

//+----------------------------------------------- --------------------+
//| BB1.mq4 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+----------------------------------------------- --------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#속성 링크 "https://www.mql5.com"
#속성 버전 "1.00"
#속성엄격

extern 이중 로트 = 1; // 많은
외부 intExp = 1; // 만료
extern int 대기 = 2; // 한 방향의 촛불 개수
extern int 시간 초과 = 1; // 시간 간격
extern 이중 승수 = 3; // 승수
extern int 미끄러짐 = 5; // 미끄러짐
extern int 매직 = 774274; // 마법
외부 정수 MaxOpenOrders = 1; // 최대 주문 수

int 티켓, 유형, SymbolCount;
두 배 가격, 많은;

입력 문자열 TradeSymbols = "EURUSD_OP, GBPUSD_OP, AUDUSD_OP, NZDUSD_OP, USDCAD_OP, USDCHF_OP, GBPCAD_OP, AUDNZD_OP, CHFJPY_OP, GBPCHF_OP"; // 트레이딩 심볼

문자열 기호[50]; // 50은 가능한 최대 문자 수입니다.


//------------------------------------------------ --

int OnInit()

{

if (IsTesting() || !ExtractSymbols())

{

SymbolCount = 1;

기호[0] = 기호();

}

반환(INIT_SUCCESSED);

}

//------------------------------------------------ --

bool ExtractSymbols()

{

짧은 쉼표 = StringGetCharacter(",", 0);

SymbolCount = StringSplit(TradeSymbols, 쉼표, 기호);

for (int i = 0, i < SymbolCount, i++)

{

StringToUpper(심볼[i]);

기호[i] = StringTrimRight(기호[i]); // 임의의 공백으로부터 보호

기호[i] = StringTrimLeft(기호[i]);

}

if (SymbolCount > 0) return(true);

반환(거짓);

}

//------------------------------------------------ --

무효 OnTick()

{

for (int i=0; i<SymbolCount; i++)

{

if (CountTrades() == 0) // 주문 수는 0과 같아야 합니다.

{

if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY)) ||

(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))) && MaxOpenOrders > OrdersTotal())

// 마지막 거래가 수익성이 없으면 같은 거래가 열리지만 로트가 증가합니다.

{

유형 = TypeLastHistOrder();

if (유형 == OP_BUY) 가격 = LastAsk;

if (유형 == OP_SELL) 가격 = LastBid;

로트 = NormalizeDouble(LotsLastHistOrder()*승수, 2);

티켓 = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0 && MaxOpenOrders > OrdersTotal())

// 마지막 거래의 이익이 0이면 동일하게 엽니다.

{

유형 = TypeLastHistOrder();

if (유형 == OP_BUY) 가격 = LastAsk;

if (유형 == OP_SELL) 가격 = LastBid;

많은 = NormalizeDouble(LotsLastHistOrder(), 2);

티켓 = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))

|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))

|| CountHistTrades() == 0)// 마지막 거래가 수익성이 있으면 주문이 열립니다.

{

if (SignalBuy(Symbols[i]) && MaxOpenOrders > OrdersTotal())

{

티켓 = OrderSend(Symbols[i], OP_BUY, lot, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

if (SignalSell(Symbols[i]) && MaxOpenOrders > OrdersTotal())

{

티켓 = OrderSend(Symbols[i], OP_SELL, lot, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

}

}

}

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

int CountTrades(int 유형 = -1)

{

정수 cnt = 0;

(int i=OrdersTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

cnt++;

}

}

리턴(cnt);

}

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

int CountHistTrades(int 유형 = -1)

{

정수 cnt = 0;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

cnt++;

}

}

리턴(cnt);

}

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

bool SignalBuy(stringSym)

{

for (int i=1; i<=대기; i++)

{

더블 C = iClose(Sym, PERIOD_M5, i); // 여기에 원하는 시간 프레임을 지정합니다.

이중 O = iOpen(Sym, PERIOD_M5, i);

if (C > O) return(거짓);

}

if ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= 대기 || (대기 == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))

&& CountHistTrades() > 0) return(true);

if (CountHistTrades() == 0) return(true);

반환(거짓);

}

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

bool SignalSell(stringSym)

{

for (int i=1; i<=대기; i++)

{

더블 C = iClose(Sym, PERIOD_M5, i); // 여기에 원하는 시간 프레임을 지정합니다.

이중 O = iOpen(Sym, PERIOD_M5, i);

if (C < O) return(거짓);

}

if ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= 대기 || (대기 == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))

&& CountHistTrades() > 0) return(true);

if (CountHistTrades() == 0) return(true);

반환(거짓);

}

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

날짜/시간 TimeLastHistOrder(int 유형 = -1)

{

날짜 시간 마지막 시간 = 0;

날짜 시간 오픈 시간 = 0;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

{

if (OrderCloseTime() > 마지막 시간)

{

마지막 시간 = OrderCloseTime();

오픈타임 = 주문오픈타임();

}

}

}

}

반환(오픈 시간);

}

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

intTypeLastHistOrder()

{

날짜 시간 = 0;

정수 유형 = -1;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == 매직)

{

if (OrderCloseTime() > 시간)

{

시간 = OrderCloseTime();

유형 = 주문 유형();

}

}

}

}

반환(유형);

}

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

이중 LotLastHistOrder(int 유형 = -1)

{

날짜 시간 = 0;

이중 로트 = 0;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

{

if (OrderOpenTime() > 시간)

{

시간 = OrderOpenTime();

제비 = OrderLots();

}

}

}

}

반환(많은);

}

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

두 배 PriceCloseLastHistOrder(int 유형 = -1)

{

날짜 시간 = 0;

이중 가격 = 0;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

{

if (OrderCloseTime() > 시간)

{

시간 = OrderCloseTime();

가격 = OrderClosePrice();

}

}

}

}

반품(가격);

}

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

두 배 PriceOpenLastHistOrder(int 유형 = -1)

{

날짜 시간 = 0;

이중 가격 = 0;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

{

if (OrderCloseTime() > 시간)

{

시간 = OrderCloseTime();

가격 = OrderOpenPrice();

}

}

}

}

반품(가격);

}

 
얘들아 도와줘 저는 Stforex의 MT4 플랫폼에서 거래합니다. 주문을 열 때 차트에 진입 레벨이 표시되지 않고( 점선 없음), 따라서 손절매를 설정하는 것이 편리하지 않습니다. 누구든지 무엇이 잘못되었고 어떻게 고칠 수 있는지 알고 있습니까?
 
gloomy159 :
얘들아 도와줘 저는 Stforex의 MT4 플랫폼에서 거래합니다. 주문을 열 때 차트에 진입 레벨이 표시되지 않으므로(점선 없음), 따라서 손절매를 설정하는 것이 편리하지 않습니다. 누구든지 무엇이 잘못되었고 어떻게 고칠 수 있는지 알고 있습니까?

http://prntscr.com/chfa36

설정 - 차트 - 거래 수준 표시

 

여러분, 어떤 함수가 오류 65를 반환할 수 있습니까?

ERR_INVALID_ACCOUNT 65 잘못된 계좌번호
 
testerMT4 :

http://prntscr.com/chfa36

설정 - 차트 - 거래 수준 표시

이 기능은 처음에 활성화되었지만 여전히 차트에 수준이 표시되지 않습니다.
 
gloomy159 :
이 기능은 처음에 활성화되었지만 여전히 차트에 수준이 표시되지 않습니다.
색상 설정에서 배경색과 동일한 색상이 아닌 볼륨에 할당된 색상인지 확인합니다.
 
alvlaf :

그것은 몇 가지 오류를 제공, 그것은 그것을 고칠 수 없습니다. 여기서 무슨 문제가 있습니까?


OnTick과 LastAsk 및 LastBid 변수에 닫는 중괄호를 추가하는 것을 잊었습니다. 다음은 오류 없이 컴파일되는 코드입니다. 성능을 확인하지 않았습니다.

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

//| BB1.mq4 |

//| Copyright 2016, MetaQuotes Software Corp. |

//| https://www.mql5.com |

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

#property copyright "Copyright 2016, MetaQuotes Software Corp."

#속성 링크 "https://www.mql5.com"

#속성 버전 "1.00"

#속성엄격


extern 이중 로트 = 1; // 많은

외부 intExp = 1; // 만료

extern int 대기 = 2; // 한 방향의 촛불 개수

extern int 시간 초과 = 1; // 시간 간격

extern 이중 승수 = 3; // 승수

extern int 미끄러짐 = 5; // 미끄러짐

extern int 매직 = 774274; // 마법

외부 정수 MaxOpenOrders = 1; // 최대 주문 수


int 티켓, 유형, SymbolCount;

두 배 가격, 많은;

입력 문자열 TradeSymbols = "EURUSD_OP, GBPUSD_OP, AUDUSD_OP, NZDUSD_OP, USDCAD_OP, USDCHF_OP, GBPCAD_OP, AUDNZD_OP, CHFJPY_OP, GBPCHF_OP"; // 트레이딩 심볼

문자열 기호[50]; // 50은 가능한 최대 문자 수입니다.

//------------------------------------------------ --

int OnInit()

{

if (IsTesting() || !ExtractSymbols())

{

SymbolCount = 1;

기호[0] = 기호();

}

반환(INIT_SUCCESSED);

}

//------------------------------------------------ --

bool ExtractSymbols()

{

짧은 쉼표 = StringGetCharacter(",", 0);

SymbolCount = StringSplit(TradeSymbols, 쉼표, 기호);

for (int i = 0, i < SymbolCount, i++)

{

StringToUpper(심볼[i]);

기호[i] = StringTrimRight(기호[i]); // 임의의 공백으로부터 보호

기호[i] = StringTrimLeft(기호[i]);

}

if (SymbolCount > 0) return(true);

반환(거짓);

}

//------------------------------------------------ --

무효 OnTick()

{

for (int i=0; i<SymbolCount; i++)

{

이중 LastAsk = SymbolInfoDouble(Symbols[i], SYMBOL_ASK);

이중 LastBid = SymbolInfoDouble(Symbols[i], SYMBOL_BID);

if (CountTrades() == 0) // 주문 수는 0과 같아야 합니다.

{

if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY)) ||

(TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))) && MaxOpenOrders > OrdersTotal())

// 마지막 거래가 수익성이 없으면 같은 거래가 열리지만 로트가 증가합니다.

{

유형 = TypeLastHistOrder();

if (유형 == OP_BUY) 가격 = LastAsk;

if (유형 == OP_SELL) 가격 = LastBid;

로트 = NormalizeDouble(LotsLastHistOrder()*승수, 2);

티켓 = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0 && MaxOpenOrders > OrdersTotal())

// 마지막 거래의 이익이 0이면 동일하게 엽니다.

{

유형 = TypeLastHistOrder();

if (유형 == OP_BUY) 가격 = LastAsk;

if (유형 == OP_SELL) 가격 = LastBid;

많은 = NormalizeDouble(LotsLastHistOrder(), 2);

티켓 = OrderSend(Symbols[i], Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))

|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))

|| CountHistTrades() == 0)// 마지막 거래가 수익성이 있으면 주문이 열립니다.

{

if (SignalBuy(Symbols[i]) && MaxOpenOrders > OrdersTotal())

{

티켓 = OrderSend(Symbols[i], OP_BUY, lot, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

if (SignalSell(Symbols[i]) && MaxOpenOrders > OrdersTotal())

{

티켓 = OrderSend(Symbols[i], OP_SELL, lot, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);

}

}

}

}

}

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

int CountTrades(int 유형 = -1)

{

정수 cnt = 0;

(int i=OrdersTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

cnt++;

}

}

리턴(cnt);

}

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

int CountHistTrades(int 유형 = -1)

{

정수 cnt = 0;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

cnt++;

}

}

리턴(cnt);

}

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

bool SignalBuy(stringSym)

{

for (int i=1; i<=대기; i++)

{

더블 C = iClose(Sym, PERIOD_M5, i); // 여기에 원하는 시간 프레임을 지정합니다.

이중 O = iOpen(Sym, PERIOD_M5, i);

if (C > O) return(거짓);

}

if ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= 대기 || (대기 == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))

&& CountHistTrades() > 0) return(true);

if (CountHistTrades() == 0) return(true);

반환(거짓);

}

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

bool SignalSell(stringSym)

{

for (int i=1; i<=대기; i++)

{

더블 C = iClose(Sym, PERIOD_M5, i); // 여기에 원하는 시간 프레임을 지정합니다.

이중 O = iOpen(Sym, PERIOD_M5, i);

if (C < O) return(거짓);

}

if ((iBarShift(Sym, 0, TimeLastHistOrder()+Timeout) >= 대기 || (대기 == 0 && TimeCurrent() >= TimeLastHistOrder()+Timeout))

&& CountHistTrades() > 0) return(true);

if (CountHistTrades() == 0) return(true);

반환(거짓);

}

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

날짜/시간 TimeLastHistOrder(int 유형 = -1)

{

날짜 시간 마지막 시간 = 0;

날짜 시간 오픈 시간 = 0;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

{

if (OrderCloseTime() > 마지막 시간)

{

마지막 시간 = OrderCloseTime();

오픈타임 = 주문오픈타임();

}

}

}

}

반환(오픈 시간);

}

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

intTypeLastHistOrder()

{

날짜 시간 = 0;

정수 유형 = -1;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == 매직)

{

if (OrderCloseTime() > 시간)

{

시간 = OrderCloseTime();

유형 = 주문 유형();

}

}

}

}

반환(유형);

}

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

이중 LotLastHistOrder(int 유형 = -1)

{

날짜 시간 = 0;

이중 로트 = 0;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

{

if (OrderOpenTime() > 시간)

{

시간 = OrderOpenTime();

제비 = OrderLots();

}

}

}

}

반환(많은);

}

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

두 배 PriceCloseLastHistOrder(int 유형 = -1)

{

날짜 시간 = 0;

이중 가격 = 0;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

{

if (OrderCloseTime() > 시간)

{

시간 = OrderCloseTime();

가격 = OrderClosePrice();

}

}

}

}

반품(가격);

}

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

두 배 PriceOpenLastHistOrder(int 유형 = -1)

{

날짜 시간 = 0;

이중 가격 = 0;

(int i=OrdersHistoryTotal()-1; i>=0; i--)

{

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))

{

if (OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))

{

if (OrderCloseTime() > 시간)

{

시간 = OrderCloseTime();

가격 = OrderOpenPrice();

}

}

}

}

반품(가격);

}

 

안녕하세요!

TP 포지션이 청산 되었는지 어떻게 알 수 있습니까? 나는 OrderClosePrice()==OrderTakeProfit() 이 사용 하는 올바른 방법이라고 생각하지 않습니다.