초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 641

 
안녕하세요 여러분! 도움을 요청합니다. 어떤 이유로 전역 변수 값이 재설정됩니다. 모든 것을 보여주는 간단한 코드를 작성했습니다.
 #property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#include <Trade\Trade.mqh>
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   GlobalVariableSet ( "Mflag" , 0 );
//---
   return ( INIT_SUCCEEDED );
  }

void OnTick ()
  {
//---

 Print ( "до " , GlobalVariableGet ( "Mflag" ));
 GlobalVariableSet ( "Mflag" , 1 );
 Print ( "после " , GlobalVariableGet ( "Mflag" ));
     
     
  }

결과는 다음과 같습니다.

최대 0.0

1.0 이후

최대 0.0

1.0 이후

최대 0.0

즉, 각 틱마다 변수는 0으로 바뀝니다. 알다시피 Expert Advisor가 시작될 때 1번 호출되는 OnInit가 호출될 때만 값 0을 취하지만.

뭐가 문제야, 말해!

 
paylesss :
안녕하세요 여러분! 도움을 요청합니다. 어떤 이유로 전역 변수 값이 재설정됩니다. 모든 것을 보여주는 간단한 코드를 작성했습니다.

결과는 다음과 같습니다.

최대 0.0

1.0 이후

최대 0.0

1.0 이후

최대 0.0

즉, 각 틱마다 변수는 0으로 바뀝니다. 알다시피 Expert Advisor가 시작될 때 1번 호출되는 OnInit가 호출될 때만 값 0을 취하지만.

뭐가 문제야, 말해!

최신 빌드에서 확인:

 2016.10 . 12 12 : 15 : 07.743 Terminal        MetaTrader 5 x64 build 1445 started (MetaQuotes Software Corp.)
2016.10 . 12 12 : 15 : 07.761 Terminal        Windows 10 Pro (x64 based PC), IE 11.00 , UAC, Intel Core i3- 3120 M  @ 2.50 GHz, RAM: 4737 / 8077 Mb, HDD: 40749 / 233310 Mb, GMT+ 02 : 00
2016.10 . 12 12 : 15 : 07.761 Terminal        C:\Users\KVN\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

전문가 코드:

 //+------------------------------------------------------------------+
//|                                                 ProjectName.mql5 |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#include <Trade\Trade.mqh>
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   GlobalVariableSet ( "Mflag" , 0 );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   Print ( "до " , GlobalVariableGet ( "Mflag" ));
   GlobalVariableSet ( "Mflag" , 1 );
   Print ( "после " , GlobalVariableGet ( "Mflag" ));
  }
//+------------------------------------------------------------------+

결과:

 2016.10 . 12 12 : 29 : 50.934 Tests (GBPUSD,M5)       до 0.0
2016.10 . 12 12 : 29 : 50.934 Tests (GBPUSD,M5)       после 1.0
2016.10 . 12 12 : 29 : 51.400 Tests (GBPUSD,M5)       до 1.0
2016.10 . 12 12 : 29 : 51.400 Tests (GBPUSD,M5)       после 1.0
2016.10 . 12 12 : 29 : 51.819 Tests (GBPUSD,M5)       до 1.0
2016.10 . 12 12 : 29 : 51.819 Tests (GBPUSD,M5)       после 1.0
2016.10 . 12 12 : 29 : 53.199 Tests (GBPUSD,M5)       до 1.0
2016.10 . 12 12 : 29 : 53.199 Tests (GBPUSD,M5)       после 1.0
2016.10 . 12 12 : 29 : 53.251 Tests (GBPUSD,M5)       до 1.0
2016.10 . 12 12 : 29 : 53.251 Tests (GBPUSD,M5)       после 1.0
2016.10 . 12 12 : 29 : 53.341 Tests (GBPUSD,M5)       до 1.0
2016.10 . 12 12 : 29 : 53.341 Tests (GBPUSD,M5)       после 1.0

오류가 발견되지 않았습니다. 코드가 올바르게 작동합니다.

파일:
Tests.mq5  3 kb
 

감사합니다! 컴퓨터를 다시 시작하는 것이 도움이 되었습니다! 아침 내내 앉아 있었던 것이 부끄럽습니다))

 
안녕하세요, 테스터용 코드에 수식을 구현할 수 있습니까?
(예: mql5 클라우드 네트워크 가 비활성화되어 있고 테스트에 2-5시간 이상 소요되는 경우) mql5 클라우드 네트워크를 활성화합니다.
 
newnek :
안녕하세요, 테스터용 코드에 수식을 구현할 수 있습니까?
(예: mql5 클라우드 네트워크 가 비활성화되어 있고 테스트에 2-5시간 이상 소요되는 경우) mql5 클라우드 네트워크를 활성화합니다.
MQL5에는 아직 MQL5 Cloud Network의 연결/해제를 관리하는 기능이 없는 것 같습니다. 이제 명령줄에서 즉시 테스트를 시작하면 네트워크에 연결할 수 있습니다.
 
Karputov Vladimir :
MQL5에는 아직 MQL5 Cloud Network의 연결/해제를 관리하는 기능이 없는 것 같습니다. 이제 명령줄에서 즉시 테스트를 시작하면 네트워크에 연결할 수 있습니다.
네, 봤습니다. 결제에 돈을 들이지 않고 잠시 후 클라우드를 켜고 싶습니다.
 
newnek :
네, 봤습니다. 결제에 돈을 들이지 않고 잠시 후 클라우드를 켜고 싶습니다.
그러면 WinAPI만이 도움이 될 것입니다.
 
Vladislav Andruschenko :
고맙습니다.
 
Karputov Vladimir :
그러면 WinAPI만이 도움이 될 것입니다.
너무 깊어서 아직 오르지 못했다
 

올빼미를 썼지 만 어떤 이유로 후행 정지가 작동하지 않습니다 ... 이유는 무엇입니까?

 //+------------------------------------------------------------------+
//|                                                         DDos.mq4 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
// Переменные, изменяемые программно
int Corr;                     // Автоматический корректор котировок, 10 для 5-значных котировок и 1 для 4-значных
int TwoDigCorr;               // Корректор для работы с двухзначными котировками
bool New_Bar= false ;           // Флаг образования нового бара
int Oppoz;                   // Флаг выставления противоположной отложки при СЛ
int TradeFlag;               // Флаг возможности открытия сделок
//--- input parameter
input double InpPips= 20 ;
extern double Lot= 0.01 ;
extern int TrailingStop = 30 ;     // размер трейлинг стопа
extern int TrailingStep = 10 ;   // шаг трейлинга
extern int Magic = 0 ;         // номер ордера
extern int Slippage = 5 ;       // проскальзывание
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
 // Проверка необходимых для работы условий
   if ( IsTradeAllowed ())
   Alert ( "Работа советника  по символу " , Symbol (), " начата." );
   else
  {
   Alert ( "Торговля советниками не разрешена! Советник не будет работать. Проверьте настройки Вашего терминала." );
  }
   // Проверка пользовательских объемов
     double Mlot= MarketInfo ( Symbol (), MODE_MINLOT );
     if (Lot<Mlot)
     {
       Alert ( "Недопустимо маленькое значение объема сделок. Объем установлен на допустимый минимум!" );
       Print ( "Недопустимо маленькое значение объема сделок. Объем установлен на допустимый минимум!" );
      Lot=Mlot;
     }
   // Инициализация первичных данных
   if ( Point == 0.0001 ) Corr= 1 ;
     else Corr= 10 ;
     if ( Digits == 2 ) TwoDigCorr= 10 ;
     else TwoDigCorr= 1 ;
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
void OnTick ()
  {
//---
   static double prev_price= 0 ;
   double price= 0 ;
//---
   MqlTick last_tick;
//--- 
   if ( SymbolInfoTick ( Symbol (),last_tick))
     {
      prev_price=last_tick.bid;

       double temp=prev_price-price;
       double rezult=temp* MathPow ( 10 , Digits ());
      prev_price=price;
       Comment ( "    rezult = " ,rezult, "    price = " ,price, "    temp = " ,temp, "    Pips = " ,InpPips* Point );
       if (rezult>InpPips)
        {
         OrderSend ( Symbol (), OP_BUY ,Lot, Ask , 5 , Bid - 100 * Point , Bid + 1500 * Point , 0 , 0 , 5 , clrBlue ); // открываем бай
         OrderSend ( Symbol (), OP_SELL ,Lot, Bid , 5 , Ask + 100 * Point , Ask - 1500 * Point , 0 , 0 , 10 , clrRed ); // открываем селл
         
        }
         for ( int i= 1 ; i<= OrdersTotal (); i++)       //Цикл по всем ордерам,..
     {                                         //отражённым в терминале
       if ( OrderSelect (i- 1 , SELECT_BY_POS )== true ) //Если есть следующий
        {                                     
         OrderSelect ( 0 , SELECT_BY_TICKET );
         OrderSelect ( 0 , SELECT_BY_TICKET );
        
        }
     }                                         //Конец тела цикла
    
     }
    
   else Print ( "SymbolInfoTick() failed, error = " , GetLastError ());
  }
  
  
  
   //+------------------------------------------------------------------+
  
   void Trailing()
  {
   for ( int i= OrdersTotal () - 1 ; i> 0 ; i--)
  {
   if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
  {
   if ( OrderSymbol () == Symbol () && OrderMagicNumber () == Magic)
  {
   if ( OrderType ()== OP_BUY )
  {
   if ( Bid - OrderOpenPrice () > TrailingStop* Point || OrderStopLoss () == 0 )
  {
   if ( OrderStopLoss () < Bid -(TrailingStep+TrailingStep)* Point || OrderStopLoss () == 0 )
  {
 if   (! OrderModify ( OrderTicket (), OrderOpenPrice (), NormalizeDouble ( Bid -TrailingStop* Point , Digits ), 0 , 0 ));
   Print ( "Ошибка модификации ордера на покупку!" );
  }
  }
  }
 if ( OrderType () == OP_SELL )
 {
 if ( OrderOpenPrice ()- Ask > TrailingStop* Point || OrderStopLoss () == 0 )
{
if ( OrderStopLoss () > Ask +(TrailingStep+TrailingStep)* Point || OrderStopLoss () == 0 )
{
if (! OrderModify ( OrderTicket (), OrderOpenPrice (), NormalizeDouble ( Ask + TrailingStop* Point , Digits ), 0 , 0 ));
Print ( "Ошибка модификации ордера на продажу!" );
}
}
 }

  }
  }
  }
  }
  
사유: