Jump to content

Общие вопросы по языку MQL


Recommended Posts

sviter

Кто знает какую нибудь библиотеку dll для отправки е-mail через терминал?

Link to post
Share on other sites
  • Replies 7.6k
  • Created
  • Last Reply

Top Posters In This Topic

  • AntFX

    577

  • sergey1294

    569

  • Ugar68

    517

  • Programmer

    419

Top Posters In This Topic

Popular Posts

Ну, в данном случае мне стоило бы сразу соблюдать простейшие приёмы защитного программирования, то есть проверять, не равна ли нулю переменная, оказавшаяся под знаком деления. Ведь она "чужая", то ест

На счёт проверок, это правильно. Я больше очень практикую, то же нарывался. Но в моём случае у меня советник открывал ордер минимальным лотом вместо нормального, когда замечал, доливаться было поздно.

Основной советник выставляет "сигнальный" отложенный ордер далеко от текущей цены и каждую например, минуту модифицирует у него время экспирации: это может быть текущее время плюс 1 час, или плюс 1 су

Posted Images

ZeleBoba
10 минут назад, sviter сказал:

Кто знает какую нибудь библиотеку dll для отправки е-mail через терминал?

А чем Вас не устраивает функция SendMail?


Лучше маленький профит, чем большие рога.

Link to post
Share on other sites
sviter

В настройках нужно прописывать настройки серверов и т.п....а мне надо через dll что бы изначально все было прописано и сразу работало!

Link to post
Share on other sites
sviter

Ищу библиотеку что то типа https://www.fxblue.com/appstore/u17/...r-guide#toc1.2
Что бы встроить ее в код и ненадо было вводить данные в настройках терминала!
Ее скачать не могу, ибо не получается скачать((((

Link to post
Share on other sites
Ugar68
2 часа назад, sviter сказал:

Кто знает какую нибудь библиотеку dll для отправки е-mail через терминал?

Я то же когда то озадачивался проблемой отправки письма не через терминал. По другой причине. Мне надо было отправлять уведомление о потере связи терминалом. А если терминал потерял связь, он не может отправить письмо своими средствами. Я нашёл программы отправки письма через командную строку. Написал пакетный файл, а программа на MQL запускала его с помощью функции ShellExecuteW из Shell32.dll которая есть в винде.

 


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
torgf
10 часов назад, Ugar68 сказал:

Поправка: АС строится по медианной цене. Но сути это не меняет.

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

Открывается бар красным ,  потом становится зелёным цветом. Неужели нет возможности узнать что бар открылся красной гистограммой АС?

Link to post
Share on other sites
Ugar68
10 минут назад, torgf сказал:

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

Открывается бар красным ,  потом становится зелёным цветом. Неужели нет возможности узнать что бар открылся красной гистограммой АС?

Только на текущем баре можно зафиксировать показание в момент открытия бара. На истории не получится без переделки АС. В момент открытия бара Open=Close=High=Low. Когда бар закрылся это совсем не так. Так вот на истории все бары уже закрыты и если индикатор использует Close, High или Low, то его показания будет совсем не такими как в момент открытия бара. АС использует медианную цену (High+Low)/2.

Единственный способ видеть на истории показания в момент открытия бара, это переделать АС на работу по ценам открытия. Там 2 SMA. В них задана цена. Вызывать потом по iCustom.

 


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
torgf
11 минут назад, Ugar68 сказал:

 

 

Спасибо, как жаль что мир неидеален) 

Надеюсь, так покажет то что нужно.

       ExtMacdBuffer[i]=iMA(NULL,0,PERIOD_FAST,0,MODE_SMA,PRICE_OPEN,i)-
                       iMA(NULL,0,PERIOD_SLOW,0,MODE_SMA,PRICE_OPEN,i);

 

Link to post
Share on other sites
DVargo
8 часов назад, Ugar68 сказал:

Я то же когда то озадачивался проблемой отправки письма не через терминал. По другой причине. Мне надо было отправлять уведомление о потере связи терминалом. А если терминал потерял связь, он не может отправить письмо своими средствами. Я нашёл программы отправки письма через командную строку. Написал пакетный файл, а программа на MQL запускала его с помощью функции ShellExecuteW из Shell32.dll которая есть в винде.

 

А иметь 2 терминала от двух разных брокеров не пробовали?

 

Есть еще CRM всякие, основное дело которых вести учет документов, и спамить в почту.

 

Как вариант можно открыть почту в браузере и отправлять через него.

Так же к многим почтовым сервисам есть апи.

Link to post
Share on other sites
DVargo
10 часов назад, sviter сказал:

В настройках нужно прописывать настройки серверов и т.п....а мне надо через dll что бы изначально все было прописано и сразу работало!

Закажите во фрилансе

вам напишут советник открывающий вкладку почта и автоматически ее заполняющую.

 

dll может умереть при выходе новых обновлений, а ее автор получить наследство и поменять сферу деятельности, ну или еще что-нибудь.

Чужой длл может слать и не только вам. ибо не известно что там в коде.

 

Link to post
Share on other sites
Ugar68
8 часов назад, DVargo сказал:

А иметь 2 терминала от двух разных брокеров не пробовали?

 

Есть еще CRM всякие, основное дело которых вести учет документов, и спамить в почту.

 

Как вариант можно открыть почту в браузере и отправлять через него.

Так же к многим почтовым сервисам есть апи.

Держать терминал от другого брокера только для отправки письма, или тот же CRM это не рациональное расходование ресурсов vps. Уж лучше тогда свой почтовый сервер поставить. Программки, отправляющие письмо из командной строки, обычно весят килобайты, редко до пары мегабайт. Запускаются только в момент когда надо отправить письмо. Хотя я допускаю что в серверной винде есть какая то длл с функциями отправки. А в w10 можно наверное, припахать, встроенную мыльницу. Но опять же держать такого монстра постоянно запущенным, как то не нормально.


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
DVargo
15.02.2019 в 10:25, Ugar68 сказал:

Держать терминал от другого брокера только для отправки письма, или тот же CRM это не рациональное расходование ресурсов vps. Уж лучше тогда свой почтовый сервер поставить. Программки, отправляющие письмо из командной строки, обычно весят килобайты, редко до пары мегабайт...

Обычно у трейдеров по несколько терминалов крутится на VPS.

Спящий терминал ест до 40 МБ. Обычно на VPS крутится до 5-6 терминалов.

Самый короткий и легкий код на МКЛ.

Запускать 2 терминал можно программно при отсутствии связи.

 

CRM бывают разные - на питоне, на ПХП. и могут быть легкими. Это может быть скрипт запускаемый раз в сколько то и проверяющий наличие сообщения в папке.

А может быть и скрипт запускаемый из вне - аналог вашей программы.

 

Вы тело письма формируете напрямую из МКЛ или передаете через файл? или отправляете какое-то стандартное сообщение?

Link to post
Share on other sites
AntFX
1 минуту назад, DVargo сказал:

Спящий терминал ест до 40 МБ.

Если в него напихать десяток графиков с лимитом по 10000000 баров в каждом то может и по 500 мб есть, ага )


1

Link to post
Share on other sites
DVargo

А мозг на что? зачем 100500 баров пихать?

И чел явно каждый мегабайт считает, он явно все по оптимуму или минимуму делает.

Link to post
Share on other sites
AntFX
3 минуты назад, DVargo сказал:

И чел явно каждый мегабайт считает, он явно все по оптимуму или минимуму делает.

Тогда откуда 40? Вот у меня терминал висит, один график открыт без лимита по барам, памяти ест стабильно меньше 20


1

Link to post
Share on other sites
Ugar68
1 час назад, DVargo сказал:

Вы тело письма формируете напрямую из МКЛ или передаете через файл? или отправляете какое-то стандартное сообщение?

Тема и текст письма формируются в индикаторе на mql. Потом он запускает cmd файл с ними в параметрах. Хотя конечно, в индикаторе можно было сформировать всю командную строку и обойтись без cmd, но мне так удобнее. Ведь так я могу использовать разные программы, отправляющие письмо из командной строки, не переписывая индикатор. Короче, так универсальнее.


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
sviter

Может кто знает как сделать скрипт массовой рассылки email пользователям? Или в mql4 возможно только одному пользователю отсылать email? Это возможно вообще?

Link to post
Share on other sites
Ugar68
2 часа назад, sviter сказал:

Может кто знает как сделать скрипт массовой рассылки email пользователям? Или в mql4 возможно только одному пользователю отсылать email? Это возможно вообще?

В mql отправка по настройкам в терминале. Но возможно отправлять сторонними программами. То есть, программа на mql запускает стороннюю программу с помощmю dll, а она рассылает.


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
sviter

Здравствуйте! Подскажите как сделать следующее:
У меня в роботе стоит мартингейл с усреднением! Каждые 50 пунктов открывается новый ордер с большим лотом и тэйкпрофит подвигается!!!
Со временем столкнулся с такой проблемой, что ордера задваиваются..... тоесть открывается 0.10 ордер, через 50 пунктов,  0.20, потом 0.40, потом 0.80 и вот тут начинаются касяки, что открывается еще один 0.80 каким то макаром, причем не через 50 пунктов, а когда ему вздумается!!! в основном замечено срабатывает всегда на 4-ом калене, иногда бывало на 3-ем!!! не понимаю что за фигня!!! гляньте плиз....

 

     if(CountTrades() == 0)
     {
     if(AdxHis > AdxHis1)
     {
         TP = NormalizeDouble(Ask + takeprofit * _Point, _Digits);
         ticket = OrderSend(_Symbol, OP_BUY, lot, Ask, slippage, 0, TP, comment, Magic, 0, clrGreen); //покупка
         if(ticket > 0)
         {
         Print("Ордер на BUY успешно открыт! ");
         return;
         }
     }

    if(AdxHis < AdxHis1)
    {
         TP = NormalizeDouble(Bid - takeprofit * _Point, _Digits);
         ticket = OrderSend(_Symbol, OP_SELL, lot, Bid, slippage, 0, TP, comment, Magic, 0, clrRed); //продажа
         if(ticket > 0)
         {
         Print("Ордер на SELL успешно открыт! ");
         return;
         }
    }
    }
    else
    {
         int ordertype = FindLastOrderType(); //Функция типа ордера
      
         if(ordertype == OP_BUY) 
         {
            price = FindLastOrderPrice(OP_BUY); //Функция последней цены
            if(count > 0 && count < koleno && Ask <= price - shag * _Point)
            {
               lastlot = FindLastLot(OP_BUY);
               lastlot = NormalizeDouble(lastlot * Multiplayer, 2);
               ticket = OrderSend(_Symbol, OP_BUY, lastlot, Ask, slippage, 0, 0, comment2, Magic,0, clrGreen);
               if(ticket < 1)
               Print("Ошибка открытия ордера на покупку");
               ModifyOrders(OP_BUY);
            }
         }
         
         if(ordertype == OP_SELL)
         {
            price = FindLastOrderPrice(OP_SELL); //Функция последней цены
            if(count > 0 && count < koleno && Bid >= price + shag * _Point)
            {
               lastlot = FindLastLot(OP_SELL);
               lastlot = NormalizeDouble(lastlot * Multiplayer, 2);
               ticket = OrderSend(_Symbol, OP_SELL, lastlot, Bid, slippage, 0, 0, comment2, Magic,0, clrRed);
               if(ticket < 1)
               Print("Ошибка открытия ордера на продажу");
               ModifyOrders(OP_SELL);
            }
         }
    }

 

Link to post
Share on other sites
Ugar68
13 часов назад, sviter сказал:

Здравствуйте! Подскажите как сделать следующее:
У меня в роботе стоит мартингейл с усреднением! Каждые 50 пунктов открывается новый ордер с большим лотом и тэйкпрофит подвигается!!!
Со временем столкнулся с такой проблемой, что ордера задваиваются..... тоесть открывается 0.10 ордер, через 50 пунктов,  0.20, потом 0.40, потом 0.80 и вот тут начинаются касяки, что открывается еще один 0.80 каким то макаром, причем не через 50 пунктов, а когда ему вздумается!!! в основном замечено срабатывает всегда на 4-ом калене, иногда бывало на 3-ем!!! не понимаю что за фигня!!! гляньте плиз....

 

 

В данном случае очень важна качественная работа

FindLastOrderPrice()

 


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
sviter
11 часов назад, Ugar68 сказал:

В данном случае очень важна качественная работа


FindLastOrderPrice()

 

у меня так:
 

  double FindLastOrderPrice(int otype)
  {
   int oldticket;
   ticket = 0;
   double oldopenprice = 0;
   for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
   {
      if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == _Symbol && OrderMagicNumber() == Magic && OrderType() == otype)
         {
            oldticket = OrderTicket();
            if(oldticket > ticket)
            {
               ticket = oldticket;
               oldopenprice = OrderOpenPrice();
            }
         }
      }
   }
   return(oldopenprice);
  }

 

Link to post
Share on other sites
Ugar68

Это и называется написано как нибудь, что бы отвязаться. OrderSelect выбирает ордер и возвращает true в случае успеха. В этой функции ничего не предусмотрено, что если она вернёт false. То есть ордер есть, но по какой то причине не выбран. Эта функция его просто пропустит. А теперь подумайте, что будет если эта функция не выбрала последний открытый ордер.

Кроме того, функция ориентируется по тикету, а вообще то, в данной ситуации, должна интересовать цена открытия. То есть лучше искать самый нижний Buy и самый верхний Sell.


Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку.
Чужие программы не переделываю.

Link to post
Share on other sites
sviter

Можете помочь? ато я что то вообще не понял где косяк!

Link to post
Share on other sites
  • 2 weeks later...
ZeleBoba

Подскажите пожалуйста, что-то туплю

есть функция в которую в качестве аргумента может передаваться массив, но не всегда.

как внутри функции проверить, что произошло обращение с массивом, а не без него ?

 

// возможные варианты вызова

int arrA[10];

вариант 1: func( NULL );
вариант 2: func( arrA );

 

// функция с параметром-массивом
void func( int &arr[] )
  { if( <???> == NULL )
      { // действие 1 }
    else
      { // действие 2 }
  }
  


Лучше маленький профит, чем большие рога.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...