Вопросы от начинающих 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. Хотя в значение 0 она принимает только при вызове OnInit, которая,как известно, вызывается 1 раз в начале работы советника.

В чем проблема , подскажите! 

 
paylesss:
Привет всем! Прощу помощи. У меня почему-то сбрасываются щначения глобальных переменных. Написал простой код, на котором все видно.

Результат такой:

до 0.0

после 1.0

до 0.0

после 1.0

до 0.0

т.е С каждым тиком переменная превращается в 0. Хотя в значение 0 она принимает только при вызове OnInit, которая,как известно, вызывается 1 раз в начале работы советника.

В чем проблема , подскажите! 

Проверил на последнем билде:

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-3120M  @ 2.50GHz, 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
 

Cпасибо!Помогла перезагрузка компа!Обидно, целое утро сижу)) 

 
Здравствуйте, подскажите, есть ли возможность в коде для тестера внедрить формулу?
если (mql5 cloud network  выключена и тестирование идет больше 2-5 часов (к примеру)) то включать mql5 cloud network
 
newnek:
Здравствуйте, подскажите, есть ли возможность в коде для тестера внедрить формулу?
если (mql5 cloud network  выключена и тестирование идет больше 2-5 часов (к примеру)) то включать mql5 cloud network
Вроде ещё нет в 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("Ошибка модификации ордера на продажу!");
}
}
 }

  }
  }
  }
  }