IT Блог

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

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

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

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

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

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

Для простой отправки get и post запросов я написал библиотеку mql_requests, использующую функции библиотеки wininet.dllmql_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...


Добавить иконку в меню и на панель задач в Linux

Для добавления значка (иконки) на панель задач в Linux Mint, нужно сначала добавить иконку в меню, а затем уже можно будет её добавить на панель задач.

Более подробно, как добавить иконку в Linux Mint, смотрите ниже (в других версиях Linux должны быть похожие инструкции).

1. Нажать правой кнопкой мыши на кнопку “Меню” и нажать “Настройки”:

2. Нажать на кнопку “Открыть редактор меню”:

3. Выбрать необходимый раздел, куда нужно добавить иконку, и щёлкнуть "Новый элемент":

4. Прописать путь до скрипта (файла, который запускает программу) и добавить иконку щёлкнув по изображению "Ракеты" рядом с полями:

 Для примера можно добавить в меню программу...

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

Попробуйте

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