MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 212

 
geratdc :

Merhaba,


Aşağıdaki bilgileri arıyorum:

1. Danışmanın çalışmasındaki önemli olayları işlerken SMS bildirimlerinin uygulanması hakkında

2. 12-00 PND'den 18-00 PTN'ye kadar (haftalık işlem seansının başlangıcı ve bitişi hakkında SMS bildirimi essno :) ile işlemlerin açılması ve kapanmasının uygulanması hakkında).

3. Ticaretin tamamlanmasından sonra e-posta bildiriminin uygulanması üzerine (18-00 PTN) - haftalık bir ticaret seansı için danışmanın çalışmaları hakkında bir rapor göndermek, test cihazında bir program ve pozisyon açılış tarihlerini gösteren, kapanış tarihler, pozisyon fiyatları, pozisyon kapatma sonuçlarına göre kar/zarar. Yoksa raporlar txt formatında mı olacak?


Bana hangi işlevlerin veya komut dosyalarının bunu uyguladığını söyle? Bütün bunlar nasıl kodlanır, belki bununla ilgili bir konu vardı - sms ve e-posta bildirimleri ve raporları.

https://www.mql5.com/ru/articles/1454

İşte böyle bir şey, sadece kolaylaştırmak için)))


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

Burada forumda iyi bir SMS bildirim algoritması tartışıldı - danışman bir e-posta gönderir ve e-posta operatörü mektubun metnini içeren bir SMS gönderir. Ustaca olan her şey basittir. Orada, yalnızca cep telefonunun kaydedilmesi gerekir. Zaten daha kolay hale geldi.

Gidip okuyacağım, benzer bir fonksiyon buldum - SendMail ().İlginç bir şekilde karmaşık mı?

Bu uzun zamandır norm oldu. SMS yerine push mesajlarını kullanın, SendMail() zaten sizin tarafınızdan bulundu.
 

Herkese iyi günler!

Aşağıdaki kodu yaptım - tüm siparişleri bir kerede silmek.

 //===================================================================
void delete_all_orders()
{
bool err;
int ot;
for ( int iss= OrdersTotal ()- 1 ; iss>= 0 ; iss--)
   {
     if ( OrderSelect (iss, SELECT_BY_POS , MODE_TRADES ))
      {
       if ( OrderSymbol ()== Symbol ())
         {
           if ( OrderType ()== OP_BUYSTOP || OrderType ()== OP_SELLSTOP )
           {
            ot= OrderTicket ();
             Print ( "Удаляем ордер тикет - " , OrderTicket ());
            err= OrderDelete ( OrderTicket (), clrNONE );
             if (err== false ) error( GetLastError ());
             Print ( "Удален ордер тикет - " ,ot);
           }
           if ( OrderType ()== OP_BUY )
           {
            ot= OrderTicket ();
             Print ( "Удаляем ордер тикет - " , OrderTicket ());
            err= OrderClose ( OrderTicket (), OrderLots (), Bid , 10 , clrNONE );
             if (err== false ) error( GetLastError ());
             Print ( "Удален ордер тикет - " ,ot);
           }
           if ( OrderType ()== OP_SELL )
           {
            ot= OrderTicket ();
             Print ( "Удаляем ордер тикет - " , OrderTicket ());
            err= OrderClose ( OrderTicket (), OrderLots (), Ask , 10 , clrNONE );
             if (err== false ) error( GetLastError ());
             Print ( "Удален ордер тикет - " ,ot);
           }
         }
      }
   }
return ;
}

Sorun şu ki, neredeyse tüm siparişler kapalı. Ancak 1-2 sipariş silinmemiş olarak kalır.

Ve bu fonksiyonu ne kadar çağırsam da bu fonksiyon kalan emirleri kapatmıyor.

Hata çıkıyor - doğru fiyat değil.

Yeniden alıntılar düşündüm, ancak bu işlev zaten 500.000 kez çağrıldıysa, o zaman ne tür bir alıntı olabilir.

Ve yanlış fiyat ne olabilir?

Diğer danışmanlarda böyle bir saçmalık yoktu.

 
Valerius :

Herkese iyi günler!

Aşağıdaki kodu yaptım - tüm siparişleri bir kerede silmek.

Sorun şu ki, neredeyse tüm siparişler kapalı. Ancak 1-2 sipariş silinmemiş olarak kalır.

Ve bu fonksiyonu ne kadar çağırsam da bu fonksiyon kalan emirleri kapatmıyor.

Hata çıkıyor - doğru fiyat değil.

Yeniden alıntılar düşündüm, ancak bu işlev zaten 500.000 kez çağrıldıysa, o zaman ne tür bir alıntı olabilir.

Ve yanlış fiyat ne olabilir?

Diğer danışmanlarda böyle bir saçmalık yoktu.

Çok fazla sipariş varsa, fiyatın modasının geçmesi için zaman vardır. RefreshRates() ekleyin ve iyi olmalı.
RefreshRates - Доступ к таймсериям и индикаторам - Справочник MQL4
RefreshRates - Доступ к таймсериям и индикаторам - Справочник MQL4
  • docs.mql4.com
RefreshRates - Доступ к таймсериям и индикаторам - Справочник MQL4
 
Alexey Viktorov :
Çok fazla sipariş varsa, fiyatın modasının geçmesi için zaman vardır. RefreshRates() ekleyin ve iyi olmalı.

İşin aslı şu ki, sadece bir veya iki sipariş kaldı.

Tüm siparişler silinene kadar bu işleve bir çağrı döngüsü yapıldı.

Teorik olarak, sipariş bir satın alma içinse, o zaman Bid tarafından kapatılmalıdır ve fiyatın şu an ne olduğu önemli değildir.

Herhangi bir fiyattan Bid'de kapanmalıdır.

Ve bu işlevi zaten binlerce kez uyguladıysanız, fiyat bir şekilde kapanmalıdır.

Yoksa bir şey anlamadım?

 
Valerius :

İşin aslı şu ki, sadece bir veya iki sipariş kaldı.

Tüm siparişler silinene kadar bu işleve bir çağrı döngüsü yaptı.

Teorik olarak, sipariş bir satın alma içinse, o zaman Bid tarafından kapatılmalıdır ve fiyatın şu an ne olduğu önemli değildir.

Herhangi bir fiyattan Bid'de kapanmalıdır.

Ve bu işlevi zaten binlerce kez uyguladıysanız, fiyat bir şekilde kapanmalıdır.

Yoksa bir şey anlamadım?

Silerken günlükte herhangi bir hata var mı?

Fiyat, döngü sırasında yeterli bir mesafe hareket edebilir. Ask ve Bid, zorla (RefreshRates() çağrılırken) veya yeni bir onay işlenirken güncellenen sabitlerdir. Bu nedenle, döngünün her yinelemesinden sonra RefreshRates()'i arayın ve ne olduğunu görün.

 
Teşekkürler, deneyeceğim.
 
Valerius :
İşin aslı şu ki, sadece bir veya iki sipariş kaldı.
Tüm siparişler silinene kadar bu işleve bir çağrı döngüsü yapıldı.
Teorik olarak, sipariş bir satın alma içinse, o zaman Bid tarafından kapatılmalıdır ve fiyatın şu an ne olduğu önemli değildir.
Herhangi bir fiyattan Bid'de kapanmalıdır.
Ve bu işlevi zaten binlerce kez uyguladıysanız, fiyat bir şekilde kapanmalıdır.
Yoksa bir şey anlamadım?

Deneyin 1) sonucu ekranda hemen görmek için Yazdır'ı Uyarı ile değiştirin - daha hızlı 2) Burada bir hata kodu alırsınız. Çıktısını alın ve bakın 3) OrderSelect işlevinin hata kodunu alın ve yazdırın ve hemen OrderSymbol(), OpderType(), OrderTicket()

 if (! OrderSelect (.......))
{
   Alert ( GetLastError ());
   continue ;
}
Alert ("OrderSymbol = ",OrderSymbol(), "   OpderType = ", OpderType(), "   OrderTicket = ", OrderTicket());
 
STARIJ :

Deneyin 1) sonucu ekranda hemen görmek için Yazdır'ı Uyarı ile değiştirin - daha hızlı 2) Burada bir hata kodu alırsınız. Çıktısını alın ve bakın 3) OrderSelect işlevinin hata kodunu alın ve yazdırın ve hemen OrderSymbol(), OpderType(), OrderTicket()


Ayrıca RefreshRates()'i de denedim. Hiçbirşey değişmedi. Uyarı - baskı ile aynı, çıkıyor - yanlış parametreler.

Hata 3.

Bu sabah kalktım, danışmanın çalıştığını gördüm ve bütün gece tüm siparişleri silme işlevine bir çağrı gösterdi.

Vuruş sayacı birkaç milyon isabet gösterdi. Yani siparişler silinmez.

Ayrıca tüm siparişlerin uzaklığı için bir çek var, sigorta gibi. Emirler varsa, o zaman bir itiraz var

işlevleri silin. Program döngüler. Yani tüm siparişler silinene kadar döngüden çıkılmaz.

Ve 2 döviz çiftinde böyle çöpler. Zaten kafasını kırdı. Ne yapalım?

 
Valerius :


Ayrıca RefreshRates()'i de denedim. Hiçbirşey değişmedi. Uyarı - baskı ile aynı, çıkıyor - yanlış parametreler.

Hata 3.

Bu sabah kalktım, danışmanın çalıştığını gördüm ve bütün gece tüm siparişleri silme işlevine bir çağrı gösterdi.

Vuruş sayacı birkaç milyon isabet gösterdi. Yani siparişler silinmez.

Ayrıca tüm siparişlerin uzaklığı için bir çek var, sigorta gibi. Emirler varsa, o zaman bir itiraz var

işlevleri silin. Program döngüler. Yani tüm siparişler silinene kadar döngüden çıkılmaz.

Ve 2 döviz çiftinde böyle çöpler. Zaten kafasını kırdı. Ne yapalım?

error() işlevi nedir

             if (err== false ) error( GetLastError ());
             Print ( "Удален ордер тикет - " ,ot);

Sorunun o olması mümkündür.

 
Alexey Viktorov :

error() işlevi nedir

Sorunun o olması mümkündür.


error() işlevi, yalnızca bir hata kodu içeren bir yazı görüntüler. Bu fonksiyonla ilgili herhangi bir sorun yok, birçok danışmanda var ve asla değiştirmiyorum.

Yani kesinlikle onunla ilgili değil.

Ve işte fonksiyonun kendisi:

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