내 EA는 자체적으로 실행될 때 잘 실행되지만 동일한 프로필에서 동시에 다른 Symbol에서 동일한 EA를 실행하려고 하면 두 번째 것이 잘 실행되지 않거나 전혀 실행되지 않거나 오류. 이것은 두 개의 개별 차트에 Symbol()과 다른 매직 넘버를 사용하는 경우에도 발생합니다. 동일한 코드의 다른 버전을 실행하는 경우에도 발생합니다(예: EA 파일 이름과 매직 번호는 다르지만 코드는 동일함). 전역 변수와 충돌이 발생했습니까? 아니면 두 번째 변수가 그냥 멈추는 다른 이유가 있습니까? 감사해요.
Sneck55 :
내 EA는 자체적으로 실행될 때 잘 실행되지만 동일한 프로필에서 동시에 다른 Symbol에서 동일한 EA를 실행하려고 하면 두 번째 것이 잘 실행되지 않거나 전혀 실행되지 않거나 오류. 이것은 두 개의 개별 차트에 Symbol() 및 다른 매직 넘버를 사용하는 경우에도 발생합니다. 동일한 코드의 다른 버전을 실행하는 경우에도 발생합니다(예: EA 파일 이름과 매직 번호는 다르지만 코드는 동일함). 전역 변수와 충돌이 발생했습니까? 아니면 두 번째 변수가 그냥 멈추는 다른 이유가 있습니까? 감사해요.
내 EA는 자체적으로 실행될 때 잘 실행되지만 동일한 프로필에서 동시에 다른 Symbol에서 동일한 EA를 실행하려고 하면 두 번째 것이 잘 실행되지 않거나 전혀 실행되지 않거나 오류. 이것은 두 개의 개별 차트에 Symbol() 및 다른 매직 넘버를 사용하는 경우에도 발생합니다. 동일한 코드의 다른 버전을 실행하는 경우에도 발생합니다(예: EA 파일 이름과 매직 번호는 다르지만 코드는 동일함). 전역 변수와 충돌이 발생했습니까? 아니면 두 번째 변수가 그냥 멈추는 다른 이유가 있습니까? 감사해요.
다른 차트에서 동일한 EA를 실행하는 데 문제가 없어야 하므로(저는 문제 없이 수행합니다) 코드를 제공해야 합니다.. ?
SRC 버튼을 사용하세요!!
gooly : SRC 버튼을 사용하세요!!
SRC의 어떤 부분이 불분명합니까? 왜 안했어? 게시물을 수정하세요!
동영상 재생게시물을 수정 하세요.
많은 양의 코드는 첨부하십시오.if (BuyTicket != 0 ) { if (SmallMA<MediumMA) { for (Counter = 0 ; Counter <= OrdersTotal ()- 1 ; Counter++) { : Counter--; }
정전, OS 충돌, 터미널 또는 차트가 실수로 닫히면 다음에 BuyTicket이 손실됩니다. 당신은 미결 주문을 가질 것이지만 그것을 닫으려고 시도하지 마십시오 . OrderSelect 루프를 사용할 때 티켓 번호를 기억할 필요가 없습니다.- 닫거나 삭제할 때 카운트다운해야 합니다. 다른 EA가 주문을 마감 하면 다시 돌아가지 않습니다. 루프 및 주문 마감 또는 삭제 - MQL4 포럼
- 부울 단순화
// if(SmallMA>MediumMA&&MediumMA>LargeMA) MABuyFanning = true; // else MABuyFanning = false; MABuyFanning = (SmallMA>MediumMA&&MediumMA>LargeMA);
if (NewBar == true )
if( (2+2) == 4) == true) 라고 쓰지 않을 건가요? if(2+2 == 4) 이면 충분합니다. 따라서 if(bool == true) 를 작성하지 말고 if(bool) 또는 if(!bool) 만 사용하십시오.
SRC 버튼은 게시물을 만드는 데 사용되었습니다.
Sneck55 :
SRC 버튼은 게시물을 만드는 데 사용되었습니다.
SRC 버튼은 게시물을 만드는 데 사용되었습니다.
네, 하지만 첫 번째 줄 "지연 죄송합니다...."는 코드가 아니며 모든 것을 망쳤습니다.
#property copyright "Copyright 2014, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict extern bool CheckOncePerBar = true; extern double FixedLotSize = 1; extern double SystemStopLoss = 150; extern double TakeProfit = 0; extern int Slippage = 5; extern int MagicNumber = 3574; //Global Variables int BuyTicket; int SellTicket; double InternalStopLoss; double CalcDigits; double CalcPoint; bool MABuyFanning; bool MASellFanning; int SelectedOrder; bool Closed; int ErrorCode; string ErrLog; double BuyStopLoss; double SellStopLoss; bool NewBar; double ThisBarOpen; double SmallMA; double MediumMA; double LargeMA; int Counter; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { CalcDigits = MarketInfo(Symbol(),MODE_DIGITS);//MODE_DIGITS is count of digits after decimal point if(CalcDigits == 0) CalcPoint = 1;//Dow if(CalcDigits == 1) CalcPoint = 0.1; if(CalcDigits == 2) CalcPoint = 0.01;//Gold & Nymex if(CalcDigits == 3) CalcPoint = 0.01;//Yen if(CalcDigits == 4) CalcPoint = 0.0001;//Not used if(CalcDigits == 5) CalcPoint = 0.0001;//Non-Yen forex InternalStopLoss = SystemStopLoss*CalcPoint; return(INIT_SUCCEEDED); } //----------------------------------------------- void OnTick() { if(CheckOncePerBar == true) { if(ThisBarOpen != Open[0]) { ThisBarOpen = Open[0]; NewBar = true; } else NewBar = false; } else NewBar = true; if(NewBar == true) { //Reset Moving Averages SmallMA = iMA(NULL,0,8,0,1,0,0); MediumMA = iMA(NULL,0,10,0,1,0,0); LargeMA = iMA(NULL,0,50,0,1,0,0); if(SmallMA>MediumMA&&MediumMA>LargeMA) MABuyFanning = true; else MABuyFanning = false; if(SmallMA<MediumMA&&MediumMA<LargeMA) MASellFanning = true; else MASellFanning = false; if(BuyTicket == 0 && MABuyFanning == true) { RefreshRates(); BuyStopLoss = Bid - InternalStopLoss; // while(IsTradeContextBusy()) Sleep(10); BuyTicket = OrderSend(Symbol(),OP_BUY,FixedLotSize,Ask,Slippage,BuyStopLoss,0,"Buy Order",MagicNumber,0,Green); if(BuyTicket == -1) { ErrorCode = GetLastError(); Alert("Symbol: ",Symbol(),"Error in buy routine: ",ErrorCode); ErrLog = StringConcatenate("Bid: ",MarketInfo(Symbol(),MODE_BID)," Ask: ",MarketInfo(Symbol(),MODE_ASK)," Lots: ",FixedLotSize," Stop Loss: ",BuyStopLoss); Print(ErrLog); //Buy ticket revert to 0 so it can try again in case of slow connection/timeout etc. BuyTicket = 0; } } if(SellTicket == 0 && MASellFanning == true) { RefreshRates(); SellStopLoss = Ask + InternalStopLoss; // while(IsTradeContextBusy()) Sleep(10); SellTicket = OrderSend(Symbol(),OP_SELL,FixedLotSize,Bid,Slippage,SellStopLoss,0,"Sell Order",MagicNumber,0,Red); if(SellTicket == -1) { ErrorCode = GetLastError(); Alert("Symbol: ",Symbol(),"Error in sell routine: ",ErrorCode); ErrLog = StringConcatenate("Bid: ",MarketInfo(Symbol(),MODE_BID)," Ask: ",MarketInfo(Symbol(),MODE_ASK)," Lots: ",FixedLotSize," Stop Loss: ",SellStopLoss); Print(ErrLog); SellTicket = 0; } } //Exits if(BuyTicket != 0) { if(SmallMA<MediumMA) { for(Counter = 0; Counter <=OrdersTotal()-1; Counter++) { SelectedOrder = OrderSelect(Counter,SELECT_BY_POS); if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() && OrderType() == OP_BUY) { // while(IsTradeContextBusy()) Sleep(10); Closed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),Slippage,Red); if(Closed == true) BuyTicket = 0; else Alert("Symbol: ",Symbol()," Ticket: ",BuyTicket," unable to close buy order(s): buy ma convergence close routine"); } Counter--; } } } if(SellTicket != 0) { if(SmallMA>MediumMA) { for(Counter = 0; Counter <=OrdersTotal()-1; Counter++) { SelectedOrder = OrderSelect(Counter,SELECT_BY_POS); if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() && OrderType() == OP_SELL) { // while(IsTradeContextBusy()) Sleep(10); Closed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_ASK),Slippage,Red); if(Closed == true) SellTicket = 0; else Alert("Symbol: ",Symbol()," Ticket: ",SellTicket," unable to close sell order(s): sell ma convergence close routine"); } Counter--; } } } } return; }
코드는 매우 간단하지만 더 많은 창을 실행할수록 성능이 저하됩니다. 4개의 다른 기호에서 실행했지만 몇 분 후에 1개의 기호에서도 실패하기 시작합니다. 또한 그것은 잘 시작하지만 더 오래 실행하면(몇 시간 정도 후에) 더 느리고 느리고 덜 정확해집니다. 때로는 제거하는 데 최대 1분이 걸릴 수 있습니다. 커서 옆에 작은 원이 있는 각 창의 각 EA는 몇 년 동안 계속 돌고 있습니다. 나는 방금 조각 모음하고 바이러스를 검사한 좋은 빠른 PC를 가지고 있습니다. 정확히 같은 결과로 내 랩톱에서도 시도했습니다. 모든 M1 기록을 다운로드하려고 시도했지만 차이가 없습니다. 일종의 메모리 누수 문제가 아닐까요? MT4가 동일한 리소스를 계속해서 사용하려고 합니까? 분명히 나는 문제가 해결될 때까지 내 라이브 계정에서 거래하는 것을 신뢰할 수 없을 것입니다!
이것은 흥미 롭다...