Jump to content
Programmer

Общие вопросы по языку 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().

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

 

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

Share this post


Link to post
Share on other sites
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 - следовательно ошибка.

Share this post


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

увы..

 

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

Share this post


Link to post
Share on other sites
Rider

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

Share this post


Link to post
Share on other sites
Rider

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

Share this post


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

 

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

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

Share this post


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

 

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

Share this post


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

 

NormalizeDouble()

Share this post


Link to post
Share on other sites
Rider

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

Share this post


Link to post
Share on other sites
Ravend

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

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

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

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

Спасибо.

Edited by Ravend

Share this post


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

 

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

Share this post


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

 

 

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

Share this post


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

Share this post


Link to post
Share on other sites
Ravend

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

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

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

Share this post


Link to post
Share on other sites
Programmer

To Ravend:

 

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

 

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

Share this post


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

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

Share this post


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

вопрос!

 

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

 

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

 

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

 

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

 

спасибо.


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

Share this post


Link to post
Share on other sites
Programmer

To ЖАБА77:

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

Share this post


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

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

в норме )

спасибо!


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

Share this post


Link to post
Share on other sites
DmitryN

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

Share this post


Link to post
Share on other sites
Programmer

To DmitryN:

 

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

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

Share this post


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:

Share this post


Link to post
Share on other sites
DmitryN

Спасибо!

Share this post


Link to post
Share on other sites
abeiks

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

Share this post


Link to post
Share on other sites
Programmer

To abeiks:

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×