포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 1095 1...108810891090109110921093109410951096109710981099110011011102...1178 새 코멘트 A13ksandr 2016.09.13 02:49 #10941 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(); } } } } 반품(가격); } Any rookie question, so 초보자의 질문 MQL4 MT4 코딩하는 방법? A13ksandr 2016.09.13 02:53 #10942 alvlaf : 외부 intExp = 1; 티켓 = OrderSend(Symbol(), OP_SELL, 랏, 입찰가, 슬리피지, 0, 0, IntegerToString (Exp) , Magic); 이 코드가 당신을 위해 작동합니까??? 여기서 날짜는 현재 날짜보다 10분 이상 커야 합니다(예: TimeCurrent() + 최소 600). Aleksandr Afanasenko 2016.09.13 05:11 #10943 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(); } } } } 반품(가격); } Any rookie question, so 묻다! MQL4 및 MQL5에 대한 gloomy159 2016.09.13 06:01 #10944 얘들아 도와줘 저는 Stforex의 MT4 플랫폼에서 거래합니다. 주문을 열 때 차트에 진입 레벨이 표시되지 않고( 점선 없음), 따라서 손절매를 설정하는 것이 편리하지 않습니다. 누구든지 무엇이 잘못되었고 어떻게 고칠 수 있는지 알고 있습니까? [삭제] 2016.09.13 06:15 #10945 gloomy159 : 얘들아 도와줘 저는 Stforex의 MT4 플랫폼에서 거래합니다. 주문을 열 때 차트에 진입 레벨이 표시되지 않으므로(점선 없음), 따라서 손절매를 설정하는 것이 편리하지 않습니다. 누구든지 무엇이 잘못되었고 어떻게 고칠 수 있는지 알고 있습니까? http://prntscr.com/chfa36 설정 - 차트 - 거래 수준 표시 [삭제] 2016.09.13 06:16 #10946 여러분, 어떤 함수가 오류 65를 반환할 수 있습니까? ERR_INVALID_ACCOUNT 65 잘못된 계좌번호 gloomy159 2016.09.13 06:21 #10947 testerMT4 : http://prntscr.com/chfa36 설정 - 차트 - 거래 수준 표시 이 기능은 처음에 활성화되었지만 여전히 차트에 수준이 표시되지 않습니다. Vitalie Postolache 2016.09.13 07:12 #10948 gloomy159 : 이 기능은 처음에 활성화되었지만 여전히 차트에 수준이 표시되지 않습니다. 색상 설정에서 배경색과 동일한 색상이 아닌 볼륨에 할당된 색상인지 확인합니다. A13ksandr 2016.09.14 02:19 #10949 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(); } } } } 반품(가격); } Any rookie question, so 묻다! MQL4 및 MQL5에 대한 Nauris Zukas 2016.09.14 06:14 #10950 안녕하세요! TP 포지션이 청산 되었는지 어떻게 알 수 있습니까? 나는 OrderClosePrice()==OrderTakeProfit() 이 사용 하는 올바른 방법이라고 생각하지 않습니다. 1...108810891090109110921093109410951096109710981099110011011102...1178 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
이 코드는 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();
}
}
}
}
반품(가격);
}
외부 intExp = 1;
티켓 = OrderSend(Symbol(), OP_SELL, 랏, 입찰가, 슬리피지, 0, 0, IntegerToString (Exp) , Magic);
이 코드가 당신을 위해 작동합니까??? 여기서 날짜는 현재 날짜보다 10분 이상 커야 합니다(예: TimeCurrent() + 최소 600).
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();
}
}
}
}
반품(가격);
}
그것은 몇 가지 오류를 제공, 그것은 그것을 고칠 수 없습니다. 여기서 무슨 문제가 있습니까?
//+----------------------------------------------- --------------------+얘들아 도와줘 저는 Stforex의 MT4 플랫폼에서 거래합니다. 주문을 열 때 차트에 진입 레벨이 표시되지 않으므로(점선 없음), 따라서 손절매를 설정하는 것이 편리하지 않습니다. 누구든지 무엇이 잘못되었고 어떻게 고칠 수 있는지 알고 있습니까?
http://prntscr.com/chfa36
설정 - 차트 - 거래 수준 표시
여러분, 어떤 함수가 오류 65를 반환할 수 있습니까?
http://prntscr.com/chfa36
설정 - 차트 - 거래 수준 표시
이 기능은 처음에 활성화되었지만 여전히 차트에 수준이 표시되지 않습니다.
그것은 몇 가지 오류를 제공, 그것은 그것을 고칠 수 없습니다. 여기서 무슨 문제가 있습니까?
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() 이 사용 하는 올바른 방법이라고 생각하지 않습니다.