오류, 버그, 질문 - 페이지 3076

 
Vladimir Karputov # :

첫 번째 질문: 이 코드를 직접 작성하고 변수에 이러한 이름을 지정했습니까?

네.

 
Yury Lemeshev # :

네.

매우 이상한 이름 - 디컴파일러처럼 보입니다. 다른 코드, 즉 직접 작성한 코드를 더 많이 보여주세요.

 
Vladimir Karputov # :

매우 이상한 이름 - 디컴파일러처럼 보입니다. 다른 코드, 즉 직접 작성한 코드를 더 많이 보여주세요.

 int intLevelOrderProfit()
   {
   int iLOP,iL;
   ProfitCycle= GlobalVariableGet ( "[" +MAGICs+ "] Profit Cycle" );
   iL= GlobalVariableGet ( "[" +MAGICs+ "] Level Orders" )- 1 ;
   ArrayResize (LOP, GlobalVariableGet ( "[" +MAGICs+ "] Level Orders" )- 1 );
   int LOPc;LOPc= 0 ;
   for (i= 0 ; i< GlobalVariablesTotal (); i++)
      {
       if ( StringFind ( GlobalVariableName (i), "[" +MAGICs+ "] Level Order #" )!=- 1 )
         {
         iLOP= GlobalVariableGet ( GlobalVariableName (i));
         if (iLOP< GlobalVariableGet ( "[" +MAGICs+ "] Level Orders" ))
            {
             /*MT5*/ if ( PositionSelectByTicket ( StringSubstr ( GlobalVariableName (i),( 2 + StringFind ( GlobalVariableName (i), " #" , 0 ))))== true )
             ///*MT4*/if(OrderSelect(StringSubstr(GlobalVariableName(i),(2+StringFind(GlobalVariableName(i)," #",0))),SELECT_BY_TICKET,MODE_TRADES)==true)
               {
               LOPc++;
               ArrayFill (LOP,(iLOP- 1 )* 5 + 0 , 1 ,MAGICs);
               /*MT5*/ ArrayFill (LOP,(iLOP- 1 )* 5 + 1 , 1 ,LOP[iLOP- 1 ][ 1 ]+ PositionGetDouble ( POSITION_PROFIT )+ PositionGetDouble ( POSITION_SWAP ));
               ///*MT4*/ArrayFill(LOP,(iLOP-1)*5+1,1,LOP[iLOP-1][1]+OrderProfit()+OrderSwap()+OrderCommission());
               if (LOPc== 1 ){ ArrayFill (LOP,((iLOP- 1 )* 5 )+ 3 , 1 , StringSubstr ( GlobalVariableName (i),( 2 + StringFind ( GlobalVariableName (i), " #" , 0 ))));}
               if (LOPc== 2 ){ ArrayFill (LOP,((iLOP- 1 )* 5 )+ 4 , 1 , StringSubstr ( GlobalVariableName (i),( 2 + StringFind ( GlobalVariableName (i), " #" , 0 ))));}
               if (LOPc== 2 ){LOPc= 0 ;}
               }
            }
         }
      }
   if ( ArraySize (LOP)> 0 )
      {
       int iLOPP;
      iLOPP=Profit;
       if (CloseLevelOrders==ECLO2){iLOPP=Profit*( GlobalVariableGet ( "[" +MAGICs+ "] Level Orders" ));}
       for (i= 0 ; i< ArraySize (LOP)/ 5 ; i++)
         {
         if ( NormalizeDouble (LOP[i][ 0 ], 0 )==MAGICs)
            {
             if ((-LOP[i][ 1 ])<(-iLOPP* 2 ) && (-LOP[i][ 1 ])<(-LOP[i][ 2 ]* 2 ))
               { ArrayFill (LOP,(i* 5 )+ 2 , 1 ,(LOP[i][ 1 ])/ 2 );}
             if (LOP[i][ 1 ]>iLOPP && LOP[i][ 1 ]<=LOP[i][ 2 ])
               {
               if (LOP[i][ 3 ]> 0 )
                  {
                  ticket=LOP[i][ 3 ]; Print ( "-673- Closing by profit " +(LOP[i][ 2 ])+ " ticket " +ticket);intClosePosition();CloseMode= "CloseOneMagic" ;intDeleteGlobalVariables(); GlobalVariableSet ( "[" +MAGICs+ "] Profit Cycle" ,LOP[i][ 2 ]/ 2 +ProfitCycle);
                  }
               if (LOP[i][ 4 ]> 0 )
                  {
                  ticket=LOP[i][ 4 ]; Print ( "-677- Closing by profit " +(LOP[i][ 2 ])+ " ticket " +ticket);intClosePosition();CloseMode= "CloseOneMagic" ;intDeleteGlobalVariables(); GlobalVariableSet ( "[" +MAGICs+ "] Profit Cycle" ,LOP[i][ 2 ]/ 2 +ProfitCycle);
                  }
               GlobalVariableSet ( "[" +MAGICs+ "] INDEX" , GlobalVariableGet ( "[" +MAGICs+ "] INDEX" )/DeMultiplicationVoltage); //Edition 26082021
               ArrayFill (LOP,(i* 5 )+ 2 , 1 , 0 );
               }
            }
         ArrayFill (LOP,(i* 5 )+ 0 , 1 , 0 );
         ArrayFill (LOP,(i* 5 )+ 1 , 1 , 0 );
         ArrayFill (LOP,(i* 5 )+ 3 , 1 , 0 );
         ArrayFill (LOP,(i* 5 )+ 4 , 1 , 0 );
         }
      }
   return ( 0 );
   }
 
Vladimir Karputov # :

매우 이상한 이름 - 디컴파일러처럼 보입니다. 다른 코드, 즉 직접 작성한 코드를 더 많이 보여주세요.

Expert Advisor에서 저는 모든 것을 함수 iFunctionExample()로 구분합니다. 이 함수 안에는 int용 변수 iFE1, iFE2, iFE3, double d FE1, d FE2, d FE3용 변수가 있습니다. 무엇이 나오는지 이해하기가 더 쉽습니다.

 
Yury Lemeshev # :

Expert Advisor에서 저는 모든 것을 함수 iFunctionExample()로 구분합니다. 이 함수 안에는 int용 변수 iFE1, iFE2, iFE3, double d FE1, d FE2, d FE3용 변수가 있습니다. 무엇이 나오는지 이해하기가 더 쉽습니다.

확인. 설명을 해주시고 코드를 올바르게 삽입하기 시작해주셔서 감사합니다.

 
Yury Lemeshev # :

동시에 두 개 이상의 주문을 처리합니다. 그물. 조건부 진입점 이하 또는 그 이상의 가격을 확인합니다. 조건부 진입점은 원래 배열에 있었지만 지금은 전역에 있습니다.

그리고 숫자의 대체가 있음이 밝혀졌습니다. 그러나 하나님은 그 대체를 축복하셨습니다. 비교만 옳다면. 그러나 변경 사항도 버그입니다.

나는 SymbolInfoBid(name,SYMBOL_BID) 가 0 또는 EMPTY_VALUE를 반환할 수 있다는 것을 알게 되었습니다. 정확성을 확인하는 것이 유용합니다.

그러나 (A>B && BA<0) 경우 이중 비교는 매우 재미있습니다. "B가 ?보다 크거나 이와 같더라도 ??"

하지만 로그를 사용하는 것을 두려워하지 마십시오. 실제로 무슨 일이 일어나고 있는지 보기 위해 변수를 인쇄하십시오.

PS/ 물론 변수의 이름이 좋지 않습니다 .. 그러한 코드를 어떻게 읽고 작성합니까 :-) 그리고 가장 중요한 것은 기억하십시오

 
Maxim Kuznetsov # :

나는 SymbolInfoBid(name,SYMBOL_BID) 가 0 또는 EMPTY_VALUE를 반환할 수 있다는 것을 알게 되었습니다. 정확성을 확인하는 것이 유용합니다.

그러나 (A>B && BA<0) 경우 이중 비교는 매우 재미있습니다. "B가 ?보다 크거나 이와 같더라도 ??"

하지만 로그를 사용하는 것을 두려워하지 마십시오. 실제로 무슨 일이 일어나고 있는지 보기 위해 변수를 인쇄하십시오.

PS/ 물론 변수의 이름이 좋지 않습니다 .. 그러한 코드를 어떻게 읽고 작성합니까 :-) 그리고 가장 중요한 것은 기억하십시오

나는 이 오류가 명백해야 하는 곳에 Expert Advisor를 작성할 것입니다. 그렇지 않으면 발생하지 않을 것입니다. 나중에 다시 작성하겠습니다.

BA<0 추가 검사를 하여 함수에 들어가지 않게 하지만, 이 검사를 건너뛰는 다른 문자에서 데이터를 가져옵니다.

 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
#property version   "1.00"
#property strict
#property script_show_inputs

input int                        Magic                      =100;
input double                     Volume                     =0.01;
input bool                       EURUSD                     =true;
input bool                       EURGBP                     =true;
input bool                       GBPUSD                     =true;
input double                     Grid                       =0.5;
extern int                       Slippage                   =5;   

int i,type,ticket,MagiX;
double price;
string symbol,iOrderComment;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
   {
   return(INIT_SUCCEEDED);  
   }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
   {
   }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int iGridCreate()
   {
   double dGC1;
   dGC1=SymbolInfoDouble(symbol,SYMBOL_BID);
   for(i=0; i<25; i++)
      {GlobalVariableSet(symbol+" BUY "+(1001+i),NormalizeDouble(dGC1=dGC1-(dGC1/100*Grid),SymbolInfoInteger(symbol,SYMBOL_DIGITS)));}
   dGC1=SymbolInfoDouble(symbol,SYMBOL_BID);
   for(i=0; i<25; i++)
      {GlobalVariableSet(symbol+" SELL "+(1001+i),NormalizeDouble(dGC1=dGC1+(dGC1/100*Grid),SymbolInfoInteger(symbol,SYMBOL_DIGITS)));}
   return(0);
   }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int iMagic()
   {
   MagiX=Magic;
   return(0);
   }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int iGridOpen()
   {
   double dGO1;
   string sGO1;
   for(i=0; i<GlobalVariablesTotal(); i++)
      {
      sGO1=GlobalVariableName(i);
      symbol=StringSubstr(sGO1,0,StringFind(sGO1," ",0));
      dGO1=SymbolInfoDouble(symbol,SYMBOL_BID);
      if(StringFind(sGO1,"BUY",0)!=-1)
         {
         if(dGO1<GlobalVariableGet(sGO1))
            {
            type=0;
            iOrderComment=dGO1+"<"+GlobalVariableGet(sGO1);
            intOpenPosition();
            GlobalVariableDel(sGO1);
            }
         }
      if(StringFind(sGO1,"SELL",0)!=-1)
         {
         if(dGO1>GlobalVariableGet(sGO1))
            {
            type=1;
            iOrderComment=dGO1+">"+GlobalVariableGet(sGO1);
            intOpenPosition();
            GlobalVariableDel(sGO1);
            }
         }
      }
   return(0);
   }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int intOpenPosition()
   {
   MqlTradeRequest TradeRequest={}; MqlTradeResult TradeResult={};
   ZeroMemory(TradeRequest);ZeroMemory(TradeResult);
   TradeRequest.action=TRADE_ACTION_DEAL;
   TradeRequest.symbol=symbol;
   TradeRequest.volume=Volume;
   TradeRequest.type=type;
   if(type==0){price=SymbolInfoDouble(symbol,SYMBOL_ASK);}
   if(type==1){price=SymbolInfoDouble(symbol,SYMBOL_BID);}
   TradeRequest.price=price;
   TradeRequest.deviation=Slippage;
   TradeRequest.magic=MagiX;
   TradeRequest.comment=iOrderComment;
   if(!OrderSend(TradeRequest,TradeResult)){Print("110");intOpenPosition();}
   else{ticket=TradeResult.deal;}
   return(0);
   }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
   {
   iMagic();
   iGridOpen();
   if(EURUSD==true)
      {
      symbol="EURUSD";
      SymbolSelect(symbol,true);
      if(GlobalVariablesTotal()==0){iGridCreate();}
      for(i=0; i<GlobalVariablesTotal(); i++)
         {
         if(StringFind(GlobalVariableName(i),symbol,0)!=-1){break;}
         }
      if(i==GlobalVariablesTotal()){iGridCreate();}
      }
   if(EURGBP==true)
      {
      symbol="EURGBP";
      SymbolSelect(symbol,true);
      if(GlobalVariablesTotal()==0){iGridCreate();}
      for(i=0; i<GlobalVariablesTotal(); i++)
         {
         if(StringFind(GlobalVariableName(i),symbol,0)!=-1){break;}
         }
      if(i==GlobalVariablesTotal()){iGridCreate();}
      }
   if(GBPUSD==true)
      {
      symbol="GBPUSD";
      SymbolSelect(symbol,true);
      if(GlobalVariablesTotal()==0){iGridCreate();}
      for(i=0; i<GlobalVariablesTotal(); i++)
         {
         if(StringFind(GlobalVariableName(i),symbol,0)!=-1){break;}
         }
      if(i==GlobalVariablesTotal()){iGridCreate();}
      }
   }
 

티켓 6,7,8은 데이터를 받지 못했습니다. 혹시 제가 틀린 부분이 있다면 알려주시면 감사하겠습니다. 그러나 많은 변경을 시도했지만 오류가 지속됩니다.

시각화 모드에서 MT5 테스터의 문제를 관찰합니다.

파일:
bhshrzc2g7.png  27 kb
 

문제를 해결하려고 합니다.

다음 사항을 확인했습니다.

테스터에서는 모든 로그 쓰기 를 중지합니다. 그리고 이 순간에 실패가 발생하고 메타매틱스는 무너진다.

2020.08.17 06:12:21 EURGBP 0.90496

2020.08.17 06:12:21 EURGBP 매수 0.90496

2020.08.17 06:47:12 GBPUSD 1.3098

2020.08.17 06:47:12 GBPUSD 매수 1.3098

6시 34분 15초에 열지 말아야 할 거래가 열렸습니다.

테스터에서 내 코드를 확인하십시오. 최신 업데이트 후 테스터가 제대로 작동하지 않는 것 같습니다.


파일:
du8ozf0qs9.png  67 kb