Jump to content

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


Recommended Posts

vadd
из справки:

 

int OrderSend(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)

Основная функция, используемая для открытия позиции или установки отложенного ордера.

Возвращает номер тикета, который назначен ордеру торговым сервером или -1 в случае неудачи. Чтобы получить дополнительную информацию об ошибке, необходимо вызвать функцию GetLastError().

Вот это и проверяй.

 

Не об этом был вопрос. Понятно, что когда я устанавливаю ордер, я могу проконтролировать результат в виде тикета или ошибки. А вот как проконтролировать исполнение отложенного ордера? Каждый тик просматривать список ордеров в ожидании события, которое может произойти вообще не сегодня? Неоптимально. Но очевидно, что при срабатывании отложенника с сервера приходит некий сигнал для терминала. Может быть в библиотеке есть какая-то функция которая вызывается только в этот момент?

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

Programmer
Добрый...

 

Столкнулся с такой замарочкой:

Есть переменная типа int Count1 которая наполняется счетчиком Count1++

Для вычисления процента я немогу ее поделить на себе подобную Count2++ , но умножается... почему так?

 

Поделить можете, но при этом результат надо определить как double:

 

Например int Сount1 = 50;

int Count2=25;

double ResultPercent = (Count2/Count1)*100; // в этом случае результат будет 50 (0,5*100)

А если определить результат как целый тип, то

int ResultPercent = (Count2/Count1)*100; // в этом случае результат будет 0 (0*100), так как 0,5 округлится до 0.

 

Прежде, чем делить надо привести сами эти переменные к типу double. Т.е.:

double _Count1 = Count1, _Count2 = Count2;

double ResultPercent = (_Count1/_Count2)*100;

 

Иначе при делении Вы получите int, который потом приведётся к double - следовательно ошибка.

Link to post
Share on other sites
Shu
Но очевидно, что при срабатывании отложенника с сервера приходит некий сигнал для терминала. Может быть в библиотеке есть какая-то функция которая вызывается только в этот момент?

увы..

 

ваши бы слова, да разработчикам в уши. а на самом деле, только анализ - что было и что стало.. :tv:

Link to post
Share on other sites
Rider

Подскажите пожалуйста, можно ли запустить несколько сеансов МТ4, что бы войти одновременно на разные счета. Простое копирования в разные каталоги привело к тому, что пишет "нет связи" при любой попытке логина. Перестал логиниться даже тот каталог, с которого делали копию.

Link to post
Share on other sites
Rider

Подскажите пожалуйста, как получить результат вычисления с точностью до нужного знака после запятой.

Link to post
Share on other sites
Roger
увы..

 

ваши бы слова, да разработчикам в уши. а на самом деле, только анализ - что было и что стало.. :tv:

Еще бы знать зачем ему эти танцы с бубном, может быть и смогли бы помочь его горю.

Link to post
Share on other sites
Programmer
Подскажите пожалуйста, можно ли запустить несколько сеансов МТ4, что бы войти одновременно на разные счета. Простое копирования в разные каталоги привело к тому, что пишет "нет связи" при любой попытке логина. Перестал логиниться даже тот каталог, с которого делали копию.

 

Надо не просто копировать терминал, а установить несколько.

Link to post
Share on other sites
Programmer
Подскажите пожалуйста, как получить результат вычисления с точностью до нужного знака после запятой.

 

NormalizeDouble()

Link to post
Share on other sites
Rider

Огромное спасибо. А курс Курс MQL4 будет продолжаться?

Link to post
Share on other sites
Ravend

Доброе время суток.

В MetaEditore есть возможность выставлять брейкпойнты, но воспользоваться ими не удается.

Пробовал ставить их в теле start() и прогонять советник в "Тестере стратегий", в код так и не вывалился.

Подскажите, как ими правильно пользоваться и какие есть возможности для трассировки данных?

Спасибо.

Edited by Ravend
Link to post
Share on other sites
vadd
Еще бы знать зачем ему эти танцы с бубном, может быть и смогли бы помочь его горю.

 

"Танцы с бубном" - это что? Желание знать, сработал ли отложенный ордер? Хм...

Link to post
Share on other sites
Programmer
Огромное спасибо. А курс Курс MQL4 будет продолжаться?

 

 

Будет. Но медленно, т.к. основная база знаний уже предоставлена.

Link to post
Share on other sites
Programmer
Доброе время суток.

В MetaEditore есть возможность выставлять брейкпойнты, но воспользоваться ими не удается.

Пробовал ставить их в теле start() и прогонять советник в "Тестере стратегий", в код так и не вывалился.

Подскажите, как ими правильно пользоваться и какие есть возможности для трассировки данных?

Спасибо.

 

Ответ на Ваш вопрос:

 

Вот это действительно непростой вопрос. В MQL4 его никак не решить, т.к. в откомпилированных MQL-программах не предусмотрено наличие отладочной информации (поэтобу собственно дебаггера до сих пор нет, хотя в эдиторе предусмотрена кнопочка F9-брейкпоинт)

 

Подробнее:

 

http://forum.mql4.com/ru/5376

http://forum.mql4.com/ru/7660

http://articles.mql4.com/ru/203

Link to post
Share on other sites
Ravend

Programmer, спасибо за ответ

но не могли бы вы ответить ещё на один

как в "Тестере стратегий" выставить исследуемый интервал больше одного месяца (ТФ M5), выставление флага "Использовать дату" результата не дает

Link to post
Share on other sites
Programmer

To Ravend:

 

как в "Тестере стратегий" выставить исследуемый интервал больше одного месяца (ТФ M5), выставление флага "Использовать дату" результата не дает

 

Не даёт, потому что история не закачана. Закачайте - и всё будет работать.

Link to post
Share on other sites
Roger
"Танцы с бубном" - это что? Желание знать, сработал ли отложенный ордер? Хм...

А почему он должен не сработать, если цена дошла? Разве что денег на счете нет. Цену и счет проследить нетрудно.

Link to post
Share on other sites
ЖАБА77

вопрос!

 

реал есть связь .....

 

демо нет связи ... сегодня . суббота.

 

итоги недели не могу просмотреть .....

 

или это только в моем компьютере нет связи на демосчете?..

 

спасибо.


Покупаю лоссы -Дарю профиты) Ква!

Link to post
Share on other sites
Programmer

To ЖАБА77:

Только у тебя. Проверь пароль.

Link to post
Share on other sites
ЖАБА77
To ЖАБА77:

Только у тебя. Проверь пароль.

в норме )

спасибо!


Покупаю лоссы -Дарю профиты) Ква!

Link to post
Share on other sites
DmitryN

Добрые люди, помогите с техническим исполнением. Создаю эксперта, торгующего по стохастику. Когда главная линия = сигнальной линии, он должен смотреть на главную линию на предыдущем баре, если она < текущей главной линии - покупать; если наоборот - продавать. Так вот вопрос - как сказать ему "посмотри на предыдущий бар"?

Link to post
Share on other sites
Programmer

To DmitryN:

 

Во-первых: у Вас тригер неверный. Надо искать не равенство линий стохастика, а их пересечение, т.е. изменение их взаиморасположения.

Во-вторых: обратиться к предыдущему бару можно посредством параметра shift функции iStoch(). Поставьте shift = 1.

Link to post
Share on other sites
sam2008

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

//+------------------------------------------------------------------+

//| CloseTerminal.mq4 |

//| Copyright © 2006, MetaQuotes Software Corp. |

//| http://www.metaquotes.net |

//+------------------------------------------------------------------+

#property copyright "Copyright © 2006, MetaQuotes Software Corp."

#property link "http://www.metaquotes.net"

#property show_inputs

#include <WinUser32.mqh>

 

//+------------------------------------------------------------------+

//| script program start function |

//+------------------------------------------------------------------+

int start()

{

int hwnd=WindowHandle(Symbol(),Period());

int hwnd_parent=0;

//----

while(!IsStopped())

{

hwnd=GetParent(hwnd);

if(hwnd==0) break;

hwnd_parent=hwnd;

}

if(hwnd_parent!=0)

PostMessageA(hwnd_parent,WM_CLOSE,0,0);

//----

return(0);

}

//+------------------------------------------------------------------+

 

Или может, есть другие способы это сделать? :roll:

Link to post
Share on other sites
abeiks

Подскажите , как осуществить что-бы , все отложение ордера закрылись при особых условий? Есть похожие на OrderClose функций которые будут относится только к отложенным ордерам?

Link to post
Share on other sites
Programmer

To abeiks:

Для отложенных ордеров используйте функцию OrderDelete().

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...