IT Блог

Документации и переводы

Статьи на технические темы

Отладка в mql. Улучшить дебаг с помощью mql_debug

Зачастую при написании кода mql в среде разработки MetaEditor не хватает отладчика (дебаггера), который мог бы не только следить за переменными, но и вычислять выражения. К сожалению, в MetaEditor такого нет. Например, в коде:

int OnInit(){
    double a = MathPow(2, 1) + MathAbs(-10)/2;

    for (int i=0, len=OrdersTotal(); i < len; i++)
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderType() == OP_BUY)
           OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 70);
}

поставив точку останова, например, на 2-ой, мы не можем посмотреть в дебаггере отдельно, чему равно MathPow(2, 1) или MathAbs(-10)/2. Только если мы пошагово перейдём на следующую строчку, мы сможем узнать в дебаггере, чему равно...


Послать get post запрос в mql: mql_requests

В mql4 и mql5 для отправки простого get или post запроса можно использовать стандартную функцию WebRequest() или функции библиотеки wininet.dll.

Каждый способ имеет свои некоторые неудобства:

  • При использовании WebRequest приходится дополнительно в настройках терминала (Меню\Сервис\Настройки во вкладке Советники) разрешать использование WebRequest и вписывать url, с которым WebRequest будет работать.
  • Если использовать wininet.dll, то требуется написать приличное количество строк кода даже для обычного get запроса.

Для простой отправки get и post запросов я написал библиотеку mql_requests, использующую функции библиотеки wininet.dll. mql_requests находится на гитхабе:

Установка mql_requests

Скачайте библиотеку и скопируйте папку mql_requests/Include/requests в <TERMINAL DIR>/MQL(4/5)/Include...


Unit тестирование mql: mql_unit_test

В mql4 и mql5 есть Тестер стратегий, но нет стандартной библиотеки для тестирования простых своих написанных функций. Такое тестирование ещё имеет название Модульное тестирование или unit-тестирование.

Для тестирования своих функций я написал библиотеку mql_unit_test, который доступен на гитхабе:

Установка mql_unit_test

Скачайте библиотеку и скопируйте папку mql_unit_test/Include/unit_test в <TERMINAL DIR>/MQL(4/5)/Include.

Использование

С помощью mql_unit_test вы можете простым способом тестировать ваши функции, а результаты тестов получать в текстовом файле, например:

#include <unit_test/unit_test.mqh>


double min(double v_1, double v_2) {
    if (v_1 > v_2) return v_2;

    return v_1;
}


class MyTest: public TestCase {

    void test_my_function_min() {
        assert_equal(min(4, 10), 4);
        assert_equal(min(8,...

Классы mql взаимодействие

Приведу простой пример взаимодействия классов в mql4, их атрибутов, конструкторов и копи-конструкторов copy constructor. Особенно пример будет полезен тем, кто никогда не сталкивался с C-подобными языками программирования (C++, C#, java).

Сразу сообщу, что в этой статье не будут расписаны все моменты работы с классами. Только простой пример для того, чтобы быстро начать использовать классы для более гибкого написания кода. Полный текст программы в конце статьи.
Также я не придерживался принятого стиля написания кода mql, так как я привык оформлять код как в python и считаю принятое оформление кода менее читабельным. Да простят меня mql-разработчики!

Допустим, в некоторые переменные нужно...


Передать параметры при создании экземпляра дочернего класса mql

Если в базовом классе есть конструктор с параметрами, то при создании дочернего класса нужно добавить конструктор с передачей параметров в базовый класс.

Для наглядности сначала покажу пример без использования параметров в конструкторе:

class Base {
   public:
      void Base(){
         Print("Base: constructor is called");
      };
};

class Child : public Base {
   public:
      void Child(){
         Print("Child: constructor is called");
      };
};

В терминале во вкладке "Терминал \ Эксперты" мы видим результат выполнения кода:

2021.01.22 13:07:04.756    TestBot EURCHF,H1: Child: constructor is called
2021.01.22 13:07:04.756    TestBot EURCHF,H1: Base: constructor is called

Видно, что сначала выполнился код базового конструктора, а затем дочернего.


Динамический тег в компоненте vue 3

Для наглядности покажу на конкретном примере.

В SEO есть такое понятие, как циклические ссылки. Например, в меню обычно всегда размещают ссылки на разделы сайта вне зависимости, на какой странице мы находимся. Но если мы находимся на некоторой странице и url текущей страниц совпадает с url кого-то пункта меню, то такая ссылка становится циклической и для SEO это плохо (по крайней мере раньше так точно было).

Таким образом, при совпадении url лучше пункт меню не ссылкой делать тегом a, а использовать другой тег, например, span.

Во Vue есть специальная директива :is, значение которой и будет тегом при рендере:...


Uncaught SyntaxError: Must be called at the top of a `setup` function vue 3

Если в кратце: проблема в том, что ваша функция должна быть вызвана вверху функции setup(), а не быть вложенной в другую функцию (вызов которой происходит из setup()).

Проще понять наглядно, почему может возникнуть ошибка Uncaught SyntaxError: Must be called at the top of a `setup` function, на примере моего случая, когда для тестов я решил обернуть axios.get() в setTimeout:

<script>
    import { ref } from 'vue'
    import ui_state from "../state";
    import axios from "axios";

    export default {
        name: 'Component',

        setup() {
            const { locale_url } = ui_state

            const data = ref('')

            setTimeout(() => {
                axios.get(locale_url('/apps/'))
                    .then(response...

Где поменять тариф на продукты atlassian confluence jira

Когда только знакомишься с продуктами Atlassian, а точнее хочешь изменить настройки этих продуктов, может возникнуть ощущение, что настроек очень много и где найти нужную настройку.

Например, я сначала долго искал, где поменять тарифный план Confluence со стандартный на бесплатный. Оказалось меняется это на отдельном сайте во вкладке Продукты. Затем нужно выбрать в левом боковом меню нужный сайт и на открывшейся странице в том же боковом меню выбрать Управление подписками:


AppRegistryNotReady: The translation infrastructure cannot be initialized before the apps registry is ready

В общем случае ошибка:

django.core.exceptions.AppRegistryNotReady: The translation infrastructure cannot be initialized before the apps registry is ready. Check that you don't make non-lazy gettext calls at import time.

говорит о том, что где-то происходит вызов неленивых функций перевода во время импорта пакетов. Другими словами, во время импорта перевод должен быть ленивым, то есть использоваться функция ugettext_lazy (или pgettext_lazy).

Например, в моделях нужно использовать ugettext_lazy (вместо простого ugettext):

from django.db import models
from django.utils.translation import gettext_lazy as _


class MyModel(models.Model):
    title = models.CahrField(_('Title'))

Бывает по трейсбеку не понятно, где нужно поправить код, чтобы не возникала ошибка AppRegistryNotReady: The translation...

Для тех, кто продаёт через свой профиль в соц. сетях: моя сестра, Анастасия Мальцева запустила свой курс: «Комфортные продажи через контент»

Все знания построены на собственном опыте и имеют хороший результат, поэтому если вы продаёте товары или услуги и хотите повысить эффективность вашего аккаунта или сайта, то курс будет для вас полезен!

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте

Выберите валюту для отображения денежных единиц