Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 1146

 

Vergessen, danke für Ihre Aufmerksamkeit.


Ein neuer Trick für mich. Hier ist das Ergebnis

Der Indikator ändert weiterhin die Färbung des Diagramms. Wenn Sie das Standarddiagramm wiederherstellen und durch iCustom tippen, wird das Diagramm wieder auf seine eigene Weise eingefärbt.
 
Андрей:

Vergessen, danke für Ihre Aufmerksamkeit.


Ein neuer Trick für mich. Hier ist das Ergebnis.

Der Indikator ändert weiterhin die Färbung des Diagramms. Wenn Sie das Standarddiagramm wiederherstellen und durch iCustom tippen, wird das Diagramm wieder auf seine eigene Weise eingefärbt.

Das heißt, wir haben Werte in den Puffern, das ist schon mal gut. Versuchen Sie dann, den Wert nicht auf dem 1. Balken zu finden, sondern etwas weiter entfernt, auf 2-3 Balken, oder umgekehrt, auf 0. Sie können nichts sagen, ohne den Code gesehen zu haben.
 
Jungs bitte erklären, warum, wenn Sie den Schritt der Parameter während der Optimierung die Anzahl der Durchgänge auf der unteren rechten Seite des Terminals erhöhen nicht reduziert wird, dh die Zahl ist die gleiche wie in einer detaillierteren Optimierung, was der Grund sein könnte und die gleiche Zeit wie in einer detaillierteren Optimierung im Allgemeinen Schritt nicht helfen, die Zeit für die Optimierung zu reduzieren, warum? und wie die Optimierung im Allgemeinen zu beschleunigen?
 

Meine Herren, ich grüße Sie!


Ich habe lange Zeit mit Webrequest (get) gekämpft, zuerst mit mql4 und jetzt mit mql5.

Die Lösung ist wie folgt: Ich brauche ein onTick, um von der Website die Preise einiger exotischer Kreuze zu kopieren. Mein Makler hat sie leider nicht. Das Beispiel des Kreuzes finden Sie auf der folgenden Seite:

Bitte um Hilfe. Ich bin fast bereit, für die Lösung dieses Problems zu bezahlen: Können Sie sich vorstellen, wie weit es ging?))

Viel Glück für alle! BugRiver

 

Wie erhält man eine Variable vom Typ String in EA, wenn ein DLL-Funktionsaufruf nur einen Zeiger auf einen String zurückgibt?

const char *sqlite3_sql(sqlite3_stmt *pStmt)


Link zur Dokumentation

 
Valiantsin Karvat:

Meine Herren, ich grüße Sie!


Ich habe lange Zeit mit Webrequest (get) gekämpft, zuerst mit mql4 und jetzt mit mql5.

Die Lösung ist die folgende: Ich muss den Preis einer Reihe von exotischen Geschäften von der Website in den onTick kopieren. Mein Makler hat sie leider nicht. Das Beispiel des Kreuzes finden Sie auf der folgenden Seite:

Bitte um Hilfe. Ich bin fast bereit, für die Lösung dieses Problems zu bezahlen: Können Sie sich vorstellen, wie weit das geht?))

Viel Glück für alle! BugRiver

/// Для MQL 4
// url - адрес страницы сайта
// timeot - время в течении которого будет ожидаться ответ (мс)
// webData - сообщение-ответ на запрос т.е. данные страницы сайта в виде текста
// cut - количество отбрасываемых символов от начала сообщения-ответа
///
// Функция возвращает - true в случае, если удалось получить сообщение-ответ на запрос.
bool ReadURL(const string url, int timeout, string &webData, int cut)
{
   char
   myMessage[],
   webMessage[];
   string sWebTitle;
   if(url == NULL)
   {
      Print("URL: NULL");
      return false;
   }
   ResetLastError();
// метод HTTP, url-адрес, cookie, referer, таймаут, массив тела HTTP-сообщения, размер массива data[] в байтах, массив с данными ответа сервера, заголовки ответа сервера
   WebRequest("GET", url, NULL, NULL, timeout, myMessage, 0, webMessage, sWebTitle);
   if(ArraySize(webMessage) == 0)
   {
      Print("В качестве ответа получено пустое сообщение.");
      Print("URL: ", url);
      return false;
   }
   webData = CharArrayToString(webMessage, cut);
   Print("URL: ", url);
   Print("Title: ", sWebTitle);
   return true;
}
Dann suchen Sie mit Hilfe von Textfunktionen die gewünschten Daten aus der Variable, die Sie als Antwort auf die Nachricht erhalten haben. Am besten sehen Sie sich die Message-Response in Ihrem Browser an, d. h. Sie rufen die gewünschte Seite auf und öffnen den Quellcode der Seite. Suchen Sie dort die gewünschten Daten, und schreiben Sie einen eindeutigen Filter in das Programm.

Ich habe mit Investing noch nicht auf diese Weise gearbeitet und denke, dass dies problematisch sein wird. Sie haben ihre Website für diejenigen, die kein Abonnement haben, besonders langsam gemacht. Daher ist es besser, eine andere Quelle für Zitate zum automatischen Lesen von Programmcode zu finden.

PS> Sie können WebRequest nicht über den Indikator aufrufen. Sie müssen also die Verbindung zwischen dem Indy und dem EA oder dem Indy und dem Schleifenskript herstellen, um die Daten an den Indy zu liefern.
 
//variabel
double ma = iCustom(NULL, 0, "EMA", MA_Period, Coef, MA_Shift, SetPrice, 0, 0);
// csi-Variable
double bz = iCustom(NULL, 0, "Bollinger Squeeze v8", triggerType, stochPeriod_trigger1, cciPeriod_trigger2,rsiPeriod_trigger3,6,0);
//Fischer-Variable
double fi = iCustom(NULL, 0, "Fischer11", RangePeriods,PriceSmoothing,IndexSmoothing,Left_Right,Up_Down,0,0);
if (Ask == ma && bz > 0 && fi > Koof_H)
{
OrderSend(Symbol(), OP_BUY, 1, Ask, Slippage, Stoploss , TakeProfit, "", magic, 0, Lime);
}
if (Bid == ma && bz < 0 && fi < Koof_L)
{
OrderSend(Symbol(), OP_SELL, 1, Bid, Slippage, Stoploss , TakeProfit, "", magic, 0, Red);
}

Ich habe den Code, ich sollte sagen, eine Parodie des Codes, den ich gelernt und studierte für einen halben Tag, es erzeugt Fehler "Rückgabewert von 'OrderSend' sollte überprüft werden".

Kann mir jemand helfen, das herauszufinden?

 
evgen_gal:
//variabel
double ma = iCustom(NULL, 0, "EMA", MA_Period, Coef, MA_Shift, SetPrice, 0, 0);
// csi-Variable
double bz = iCustom(NULL, 0, "Bollinger Squeeze v8", triggerType, stochPeriod_trigger1, cciPeriod_trigger2,rsiPeriod_trigger3,6,0);
//Fischer-Variable
double fi = iCustom(NULL, 0, "Fischer11", RangePeriods, PriceSmoothing,IndexSmoothing, Left_Right, Up_Down, 0,0);
if (Ask == ma && bz > 0 && fi > Koof_H)
{
OrderSend(Symbol(), OP_BUY, 1, Ask, Slippage, Stoploss , TakeProfit, "", magic, 0, Lime);
}
if (Bid == ma && bz < 0 && fi < Koof_L)
{
OrderSend(Symbol(), OP_SELL, 1, Bid, Slippage, Stoploss , TakeProfit, "", magic, 0, Red);
}

Ich habe den Code, oder vielmehr eine Parodie davon, während eines halben Tages des Studiums und des Studiums, es erzeugt Fehler "Rückgabewert von 'OrderSend' sollte überprüft werden".

Kann mir jemand helfen, es herauszufinden und mir sagen, wie ich einen EA erstellen kann?

Mir geht es gut. Ich muss noch etwas über die Fehlerbehandlungsfunktion lesen und den Code ergänzen.

https://www.mql5.com/ru/forum/64058

Функция обработки ошибок. Нужна помощь!
Функция обработки ошибок. Нужна помощь!
  • 2015.09.12
  • www.mql5.com
Как правильно использовать функцию обработки ошибок, чтобы при возникновении непреодолимой ошибки при отправки ордера, эксперт перестал делать запросы на отправку ордера.
 
Renat Akhtyamov:
Das ist in Ordnung. Jetzt müssen Sie sich nur noch über die Funktion zur Fehlerbehandlung informieren und sie in den Code einfügen.

Wenn er den Fehler nicht findet, sagen Sie es ihm sofort:

 //ема переменая
 int result=-1;
     double ma = iCustom(NULL, 0, "EMA", MA_Period, Coef, MA_Shift, SetPrice, 0, 0); 
    // сси переменая 
     double bz = iCustom(NULL, 0, "Bollinger Squeeze v8", triggerType, stochPeriod_trigger1, cciPeriod_trigger2,rsiPeriod_trigger3,6,0);
    //фишер переменая 
     double fi = iCustom(NULL, 0, "Fischer11", RangePeriods, PriceSmoothing,IndexSmoothing, Left_Right, Up_Down, 0,0);
     
     if  (Ask == ma && bz > 0 && fi > Koof_H)
       {
      result= OrderSend(Symbol(), OP_BUY, 1, Ask, Slippage, Stoploss , TakeProfit, "", magic, 0, Lime);
      
        }
       if (Bid == ma && bz < 0 && fi < Koof_L)
       {
      result= OrderSend(Symbol(), OP_SELL, 1, Bid, Slippage, Stoploss , TakeProfit, "", magic, 0, Red);
       }
 
Vitaly Muzichenko :

Ja, er wird keinen Fehler finden, Sie sagen mir sofort:

OK.

Fügen Sie nach jedem Befehl zum Öffnen / Schließen einer Order diese Zeile hinzu:

 if (result< 0 && Fun_Error( GetLastError ())== 1 ){ return ( 0 );}

und platzieren Sie die aufgerufene Funktion nach dem EA-Code:

 //+------------------------------------------------------------------+
//| ФУНКЦИЯ ОБРАБОТКИ ОШИБОК                                         |
//+------------------------------------------------------------------+
 int Fun_Error( int Error)                        
  {   switch (Error)
     {                                           // Преодолимые ошибки        
           case 0 :       return ( 0 );
           case 1 :       Print ( "Попытка изменить уже установленные значения такими же значениями." ); return ( 1 );
           case 2 :       Print ( "Общая ошибка. Прекратить все попытки торговых операций до выяснения обстоятельств." ); return ( 0 );
           case 3 :       Print ( "В торговую функцию переданы неправильные параметры." ); return ( 1 );
           case 4 :       Print ( "Торговый сервер занят.Пробуем ещё раз.." ); Sleep ( 3000 ); return ( 1 );
           case 5 :       Print ( "Старая версия клиентского терминала." ); return ( 0 );
           case 6 :       Print ( "Нет связи с торговым сервером." ); return ( 1 );
           case 7 :       Print ( "Недостаточно прав." ); return ( 1 );
           case 8 :       Print ( "Слишком частые запросы." ); return ( 1 );
           case 9 :       Print ( "Недопустимая операция нарушающая функционирование сервера." ); return ( 1 );
           case 64 :     Print ( "Счет заблокирован. Необходимо прекратить все попытки торговых операций." ); return ( 0 );
           case 65 :     Print ( "Неправильный номер счета." ); return ( 1 );
           case 128 :     Print ( "Истек срок ожидания совершения сделки." ); return ( 1 );
           case 129 :     Print ( "Неправильная цена bid или ask, возможно, ненормализованная цена." ); return ( 1 );
           case 130 :     Print ( "Слишком близкие стопы или неправильно рассчитанные или ненормализованные цены в стопах (или в цене открытия отложенного ордера)." ); return ( 1 );
           case 131 :     Print ( "Неправильный объем, ошибка в грануляции объема." ); return ( 1 );
           case 132 :     Print ( "Рынок закрыт." ); return ( 1 );
           case 133 :     Print ( "Торговля запрещена." ); return ( 0 );
           case 134 :     Print ( "Недостаточно денег для совершения операции." ); return ( 0 );
           case 135 :     Print ( "Цена изменилась. Пробуем ещё раз.." ); RefreshRates (); return ( 1 );
           case 136 :     Print ( "Нет цен. Ждём новый тик.." );
                         while ( RefreshRates ()== false )           // До нового тика            
                         Sleep ( 1 );
                         return ( 1 );
           case 137 :     Print ( "Брокер занят.Пробуем ещё раз.." ); Sleep ( 3000 ); return ( 1 );
           case 138 :     Print ( "Запрошенная цена устарела, либо перепутаны bid и ask." ); return ( 1 );
           case 139 :     Print ( "Ордер заблокирован и уже обрабатывается." ); return ( 1 );
           case 140 :     Print ( "Разрешена только покупка. Повторять операцию SELL нельзя." ); return ( 1 );
           case 141 :     Print ( "Слишком много запросов." ); return ( 1 );
           case 142 :     Print ( "Ордер поставлен в очередь." ); return ( 1 );
           case 143 :     Print ( "Ордер принят дилером к исполнению." ); return ( 1 );
           case 144 :     Print ( "Ордер аннулирован самим клиентом при ручном подтверждении сделки." ); return ( 1 );
           case 145 :     Print ( "Модификация запрещена, так как ордер слишком близок к рынку и заблокирован из-за возможного скорого исполнения." ); return ( 1 );
           case 146 :     Print ( "Подсистема торговли занята.Пробуем ещё.." ); Sleep ( 500 ); return ( 1 );
           case 147 :     Print ( "Использование даты истечения ордера запрещено брокером." ); return ( 1 );
           case 148 :     Print ( "Количество открытых и отложенных ордеров достигло предела, установленного брокером." ); return ( 1 );
           case 149 :     Print ( "Попытка открыть противоположную позицию к уже существующей в случае, если хеджирование запрещено." ); return ( 1 );
           case 4000 :   return ( 0 );
           case 4001 :   Print ( "Неправильный указатель функции." ); return ( 1 );
           case 4002 :   Print ( "Индекс массива - вне диапазона." ); return ( 1 );
           case 4003 :   Print ( "Нет памяти для стека функций." ); return ( 1 );
           case 4004 :   Print ( "Переполнение стека после рекурсивного вызова." ); return ( 1 );
           case 4005 :   Print ( "На стеке нет памяти для передачи параметров." ); return ( 1 );
           case 4006 :   Print ( "Нет памяти для строкового параметра." ); return ( 1 );
           case 4007 :   Print ( "Нет памяти для временной строки." ); return ( 1 );
           case 4008 :   Print ( "Неинициализированная строка." ); return ( 1 );
           case 4009 :   Print ( "Неинициализированная строка в массиве." ); return ( 1 );
           case 4010 :   Print ( "Нет памяти для строкового массива." ); return ( 1 );
           case 4011 :   Print ( "Слишком длинная строка." ); return ( 1 );
           case 4012 :   Print ( "Остаток от деления на ноль." ); return ( 1 );
           case 4013 :   Print ( "Деление на ноль." ); return ( 1 );
           case 4014 :   Print ( "Неизвестная команда." ); return ( 1 );
           case 4015 :   Print ( "Неправильный переход." ); return ( 1 );
           case 4016 :   Print ( "Неинициализированный массив." ); return ( 1 );
           case 4017 :   Print ( "Вызовы DLL не разрешены." ); return ( 1 );
           case 4018 :   Print ( "Невозможно загрузить библиотеку." ); return ( 1 );
           case 4019 :   Print ( "Невозможно вызвать функцию." ); return ( 1 );
           case 4020 :   Print ( "Вызовы внешних библиотечных функций не разрешены." ); return ( 1 );
           case 4021 :   Print ( "Недостаточно памяти для строки, возвращаемой из функции." ); return ( 1 );
           case 4022 :   Print ( "Система занята." ); return ( 1 );
           case 4050 :   Print ( "Неправильное количество параметров функции." ); return ( 1 );
           case 4051 :   Print ( "Недопустимое значение параметра функции." ); return ( 1 );
           case 4052 :   Print ( "Внутренняя ошибка строковой функции." ); return ( 1 );
           case 4053 :   Print ( "Ошибка массива." ); return ( 1 );
           case 4054 :   Print ( "Неправильное использование массива-таймсерии." ); return ( 1 );
           case 4055 :   Print ( "Ошибка пользовательского индикатора." ); return ( 1 );
           case 4056 :   Print ( "Массивы несовместимы." ); return ( 1 );
           case 4057 :   Print ( "Ошибка обработки глобальныех переменных." ); return ( 1 );
           case 4058 :   Print ( "Глобальная переменная не обнаружена." ); return ( 1 );
           case 4059 :   Print ( "Функция не разрешена в тестовом режиме." ); return ( 1 );
           case 4060 :   Print ( "Функция не подтверждена." ); return ( 1 );
           case 4061 :   Print ( "Ошибка отправки почты." ); return ( 1 );
           case 4062 :   Print ( "Ожидается параметр типа string." ); return ( 1 );
           case 4063 :   Print ( "Ожидается параметр типа integer." ); return ( 1 );
           case 4064 :   Print ( "Ожидается параметр типа double." ); return ( 1 );
           case 4065 :   Print ( "В качестве параметра ожидается массив." ); return ( 1 );
           case 4066 :   Print ( "Запрошенные исторические данные в состоянии обновления." ); return ( 1 );
           case 4067 :   Print ( "Ошибка при выполнении торговой операции." ); return ( 1 );
           case 4099 :   Print ( "Конец файла." ); return ( 1 );
           case 4100 :   Print ( "Ошибка при работе с файлом." ); return ( 1 );
           case 4101 :   Print ( "Неправильное имя файла." ); return ( 1 );
           case 4102 :   Print ( "Слишком много открытых файлов." ); return ( 1 );
           case 4103 :   Print ( "Невозможно открыть файл." ); return ( 1 );
           case 4104 :   Print ( "Несовместимый режим доступа к файлу." ); return ( 1 );
           case 4105 :   Print ( "Ни один ордер не выбран." ); return ( 1 );
           case 4106 :   Print ( "Неизвестный символ." ); return ( 1 );
           case 4107 :   Print ( "Неправильный параметр цены для торговой функции." ); return ( 1 );
           case 4108 :   Print ( "Неверный номер тикета." ); return ( 1 );
           case 4109 :   Print ( "Торговля не разрешена. Необходимо включить опцию Разрешить советнику торговать в свойствах эксперта." ); return ( 1 );
           case 4110 :   Print ( "Длинные позиции не разрешены. Необходимо проверить свойства эксперта." ); return ( 1 );
           case 4111 :   Print ( "Короткие позиции не разрешены. Необходимо проверить свойства эксперта." ); return ( 1 );
           case 4200 :   Print ( "Объект уже существует." ); return ( 1 );
           case 4201 :   Print ( "Запрошено неизвестное свойство объекта." ); return ( 1 );
           case 4202 :   Print ( "Объект не существует." ); return ( 1 );
           case 4203 :   Print ( "Неизвестный тип объекта." ); return ( 1 );
           case 4204 :   Print ( "Нет имени объекта." ); return ( 1 );
           case 4205 :   Print ( "Ошибка координат объекта." ); return ( 1 );
           case 4206 :   Print ( "Не найдено указанное подокно." ); return ( 1 );
           case 4207 :   Print ( "Ошибка при работе с объектом." ); return ( 1 );
           return ( 0 );
     }
     return ( 0 );  
  }
Grund der Beschwerde: