Jump to content

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


Recommended Posts

Programmer

To Dedushka:

 

Хранятся ордера в истории по времени закрытия. Последние закрытые будут последними.

Самый последний: n = OrdersHistoryTotal( ) - 1;

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

Roger
Уважаемый, ты хочешь сказать, что

OrderSelect(0, SELECT_BY_POS, MODE_HISTORY)

сразу даст мне последний закрытый ордер?

Или наоборот, первый? .

Первый. Последний будет иметь номер OrderHistoryTotal()-1. Сортируй их в терминале как хочешь, это внутренняя сортировка только на экране, номера позиций не изменятся.

Link to post
Share on other sites
Dedushka
To Dedushka:

 

Хранятся ордера в истории по времени закрытия. Последние закрытые будут последними.

Самый последний: n = OrdersHistoryTotal( ) - 1;

 

Ну, вот и нет проблемы больше, всё остальное я решу быстро сам.

Хорошо, когда есть Programmer, Roger и тема "Язык MQL" - сразу становится легче жить.

Спасибо, джентльмены!


В бой идут одни старики. (с)

Link to post
Share on other sites
касса

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

Link to post
Share on other sites
Programmer

To касса:

 

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

 

Никак. Для этого надо декомпилировать *.ex4 файл, который, по словам разработчиков, очень хорошо защищён.

 

Читайте: http://forum.mql4.com/ru/2754

Link to post
Share on other sites
касса

а вы сможете декомпиллировать?или дайте ссылку где можно скачать декомпилятор пожалуйста.

Edited by касса
Link to post
Share on other sites
Programmer

To касса:

 

а вы сможете декомпиллировать?или дайте ссылку где можно скачать декомпилятор пожалуйста.

 

;) Нет, не смогу - никогда этим не занимался.

 

Про декомпиляцию можно прочитать здесь:

 

http://forum.mql4.com/ru/2963/page6#24658

 

здесь:

 

http://forum.mql4.com/ru/6320/page56#43392

 

и здесь:

 

http://forum.mql4.com/ru/11340/page6

 

Если Вам это очень нужно, наберите в Google фразу: "декомпиляция ex4".

Link to post
Share on other sites
касса

спасибо

Link to post
Share on other sites
Rann

Раньше декомпилировали, но разработчики каждый раз усложняют алгоритмы шифрации. На сегодняшний день я, например, не знаю, чтобы могли декомпилировать. Скорее всего, зря теряете время.


Раннев Дмитрий

AMTS Solutions

Мой блог

Link to post
Share on other sites
касса

жаль.очень нужно.

Link to post
Share on other sites
Aleks404

люди добрые помогитe прописaть условиe в совeтникe -типa, если (sell ордeр закроется по стоплосс и нe будeт открытых ордeров)то ....


О...BСEВЫШНИЙ дaй мнe силы - добиться цeли.

Link to post
Share on other sites
Programmer

To Aleks404:

 

Напрямую такое условие прописать нельзя.

Надо мониторить состояние ордера в функции start().

Делается это так:

 

int start()
{

  [b]static[/b] int t; //статическая переменная - не теряет своего значения при выходе из функции

  t = OrderSend(...); //создание Вашего ордера

  OrderSelect(t, SELECT_BY_TICKET);
  if(OrderClosePrice() == OrderStopLoss() && OrdersTotal() == 0)
  {
     //что надо сделать      
  }

  //...

}

Link to post
Share on other sites
Aleks404

Я чё то не понял, на против коментария -//создание Вашего ордера в скобках (...), надо чтото прописать, а то компилятор ругается. И где тут определение что Sell order закр., как мне можно будет поменять условие - -если (sell ордeр закроется по стоплосс и нe будeт открытых ордeров)то .., на-если (Buy ордeр закроется по стоплосс и нe будeт открытых ордeров)то ..


О...BСEВЫШНИЙ дaй мнe силы - добиться цeли.

Link to post
Share on other sites
Programmer

to Aleks404:

 

Строчкой t = OrderSend(...) я лишь намекаю, что там, где Вы открываете ордер, Вам нужно возвращаемое ф-ей OrderSend(...) значение положить в переменную t. А какой Вы создаёте ордер и как - дело Ваше.

Алгоритм одинаков как для Sell, так и для Buy.

 

А вообще, Вам не помешает почитать курс MQL4.

Link to post
Share on other sites
alex1978
Раньше декомпилировали, но разработчики каждый раз усложняют алгоритмы шифрации. На сегодняшний день я, например, не знаю, чтобы могли декомпилировать. Скорее всего, зря теряете время.

Зря Вы так думаете:D

Link to post
Share on other sites
касса
Зря Вы так думаете:D

а вы можете помочь?

Link to post
Share on other sites
alex1978
а вы можете помочь?

Лично я этим не занимаюсь ,но мне делали

Link to post
Share on other sites
~~SOM~~
Лично я этим не занимаюсь ,но мне делали

Это не ответ. Кто, где, когда, почем, зачем :). Конкретизируйте :) :)!

Link to post
Share on other sites
Programmer

... и сразу получайте BAN :biggrin:

Link to post
Share on other sites
andrspir

Пишу небольшого советника. Подскажите как программно удалить все отложенные ордера?

Link to post
Share on other sites
Programmer

To andsprir:

 

int i, total = OrdersTotal();

for(i=0; i<total; i++)

{

OrderSelect(i, SELECT_BY_POS);

if(OrderType() > 1)

OrderDelete(OrderTicket());

}

Link to post
Share on other sites
Roger

To Programmer

Вы наступаете на те же грабли, что и все начинающие. При удалении отсчет ордеров надо вести с конца, а не с начала.

Link to post
Share on other sites
Programmer

Да верно, забыл одну строчку - надо так:

 

int i, total = OrdersTotal();

for(i=0; i<total; i++)

{

OrderSelect(i, SELECT_BY_POS);

if(OrderType() > 1)

{OrderDelete(OrderTicket()); i--; total--;}

}

 

Или, действительно, удалять с конца, т.е. так:

 

int i, total = OrdersTotal();

for(i=total-1; i>=0; i--)

{

OrderSelect(i, SELECT_BY_POS);

if(OrderType() > 1)

OrderDelete(OrderTicket());

}

Link to post
Share on other sites
SeaSpirit

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

Link to post
Share on other sites
Shu
Уважаемые программисты, подскажите пожалуйста. Большинство встречающихся советников работая на валюте отказываются работать на CFD и подобных инструментах. Подскажите пожалуйста, что надо добавить в их код, чтоб они начали работать и на CFD?

большинство советников написаны для валют. боле, того, в тестовых целях. если инструмент имеет не совсем стандартные свойства (размер тика и тому подобное), нужно это предусматривать в советнике..

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