Ваши вопросы по языку MQL4

_SERG_

Активный участник
пацаны, может кто что переделывал/трогал, а может просто завалялось у кого... простой сов для восстановления всех/любых закрытых ордеров на их прежнее место один в один? Весь инет перерыл, может куском кода.. просто поделитесь у кого что есть по этому вопросу.. любые аналоги алгоритма... спасибо!!!!!!!

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

Вторая часть (Про алгоритм.):
Если интересует история. Проходишь по списку ордеров в истории, и если тип ордера больше от "0" и до "5", отрисовываешь на графике, или если рыночная ситуация позволяет, преоткрываешь позицию по данным из истории.

Где то так. Возможны и другие варианты.
 
Последнее редактирование:
  • Like
Реакции: gush

gush

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

Вторая часть (Про алгоритм.):
Если интересует история. Проходишь по списку ордеров в истории, и если тип ордера больше от "0" и до "5", отрисовываешь на графике, или если рыночная ситуация позволяет, преоткрываешь позицию по данным из истории.

Где то так. Возможны и другие варианты.
лимитки/стоповые не удаляются.. а если и так, если в ручную удалять отложки - их мониторить и восстанавливать не нужно. Восстагнавливать только открытые.
а вот если срабатал, например байстоп поцене 1.3000 с тейком 20 стопом в 10, тогда.. если закрылся по тейку, т.е. на 1.3020 сразу выставляется байлимит на 1.3000, а если закрылся по стопу на 1.2990, тогда выставляется байстоп на 1.3000 тем же лотом, с теми же тп и сл один в один и так мониторить все ордера... сложно такой процесс реализовать?
 

_SERG_

Активный участник
лимитки/стоповые не удаляются..
а если и так, если в ручную удалять отложки - их мониторить и восстанавливать не нужно.
Восстагнавливать только открытые.
а вот если срабатал, например байстоп поцене 1.3000 с тейком 20 стопом в 10, тогда..
если закрылся по тейку, т.е. на 1.3020 сразу выставляется байлимит на 1.3000, а если закрылся по стопу на 1.2990, тогда выставляется байстоп на 1.3000 тем же лотом, с теми же тп и сл один в один и так мониторить все ордера...
сложно такой процесс реализовать?

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

Если понимаешь, какой результат должен быть, то любой процесс, не сложно реализовать. (Про время (срок) реализации, речь не идёт.)
 
Последнее редактирование:
  • Like
Реакции: gush

gush

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

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

сетка руками ставится. Не доверю боту (без присмотра) сразу открывать одновременно бай и селл. Во время выхода новостей бот может не успеть сделать это.. пока один открывается цена может улететь... нужен бот восстанавливающий все закрытые ордера. Сетка ставится руками и все ордера должны стоять на смерть, как поставлены изначально))) вот и весь алгоритм *hi*
 

_SERG_

Активный участник
сетка руками ставится. Не доверю боту (без присмотра) сразу открывать одновременно бай и селл. Во время выхода новостей бот может не успеть сделать это.. пока один открывается цена может улететь... нужен бот восстанавливающий все закрытые ордера. Сетка ставится руками и все ордера должны стоять на смерть, как поставлены изначально))) вот и весь алгоритм *hi*
Тогда, какой смысл вопроса по поводу кода, если мануал трэйдинг форэвэ? Я про не доверяю ЕА. А во фрилансе, может кто и подрядится на пыполнение, если с формальными параметрами всё будет утрясено.
 

Viko2000

Почетный гражданин
Коллеги, на помощь, у вообще уже крыша уже поехала.:nda: Никак не могу понять что за бред.:not-good: В коде нет определения isdemo что как то изменить торговлю, но в тоже время на демо бот торгует чётка по алгоритму, а ставлю на реал выставляются по алгоритму две противоположные отложки, и когда одна и них выставляется в ордер, тут же происходит закрытие всего. То есть сработавшей и выставленной противоположной отложки. Чума полная.:disappointed: Кто в курсе, плиз помогите.*hi**hi*:please::please: Где собоко зарыта. Может у брокера льёт крышу. Век благодарен буду.)));):)


p/s Не ну в теории проверить брокера можно через копир с demo, так. И если не удалятся значит код. Блин а в коде, да не может быть, ведь на демо пашет. Не ну точна у меня поехало.:not-good:
 
Последнее редактирование:

_SERG_

Активный участник
Коллеги, на помощь, у вообще уже крыша уже поехала.:nda: Никак не могу понять что за бред.:not-good: В коде нет определения isdemo что как то изменить торговлю, но в тоже время на демо бот торгует чётка по алгоритму, а ставлю на реал выставляются по алгоритму две противоположные отложки, и когда одна и них выставляется в ордер, тут же происходит закрытие всего. То есть сработавшей и выставленной противоположной отложки. Чума полная.:disappointed: Кто в курсе, плиз помогите.*hi**hi*:please::please: Где собоко зарыта. Может у брокера льёт крышу. Век благодарен буду.)));):)


p/s Не ну в теории проверить брокера можно через копир с demo, так. И если не удалятся значит код. Блин а в коде, да не может быть, ведь на демо пашет. Не ну точна у меня поехало.:not-good:


Код свой, или цельнотянутый?
Изобрази код, а там и пособят, а то с эмоциями никто работать не будет.
Про теорию, не совсем понятно, как и про крышу у брокера впрочем.
Чудес короче, не бывает.
 

Viko2000

Почетный гражданин
Код свой, или цельнотянутый?
Изобрази код, а там и пособят, а то с эмоциями никто работать не будет.
Про теорию, не совсем понятно, как и про крышу у брокера впрочем.
Чудес короче, не бывает.

Спасибо за ответ.
 

gush

бродяга
Тогда, какой смысл вопроса по поводу кода, если мануал трэйдинг форэвэ? Я про не доверяю ЕА. А во фрилансе, может кто и подрядится на пыполнение, если с формальными параметрами всё будет утрясено.

а много строчек займет такой код? Просто ордер ставить на место, без всяких наваротов..
 

_SERG_

Активный участник
а много строчек займет такой код? Просто ордер ставить на место, без всяких наваротов..

Основной код, будет по определению места и времени, тут уж от фантазии аФФтора всё зависит, а установка самого ордера, считай одна команда, без наворотов. :D
 
  • Like
Реакции: gush

gush

бродяга
Основной код, будет по определению места и времени, тут уж от фантазии аФФтора всё зависит, а установка самого ордера, считай одна команда, без наворотов. :D

так может подскажешь как реализовать такой алгоритм?
Открыта сделка бай по 1.3000 тп=20, сл=10. Как только она закрылась по тейку по цене 1.3020, сов это должен заметит и выставить отложку байлимит на 1.3000 где и была. Если сделка закрывается по стопу внизу на 1.2990, сов опять это заметил выставил байстоп по 1.3000 с теми же тейками и стопами
 

RoboMaks

Элитный участник
так может подскажешь как реализовать такой алгоритм?
Открыта сделка бай по 1.3000 тп=20, сл=10. Как только она закрылась по тейку по цене 1.3020, сов это должен заметит и выставить отложку байлимит на 1.3000 где и была. Если сделка закрывается по стопу внизу на 1.2990, сов опять это заметил выставил байстоп по 1.3000 с теми же тейками и стопами

Всё ещё в поисках... :) Это достаточно сложный алгоритм и осилить его самому с начальными знаниями программирования вряд ли удастся...
Здесь требуется полный анализ всей группы ордеров с запоминанием всех параметров каждого ордера - начиная от цены установки и до переходов отложенников в рыночные, как был закрыт этот рыночный - по СЛ, ТП или иным образом, с обновлением в памяти этих отработавших и заменённых ордеров да и немало других анализов.
Основываться только на ценах установки отложенников и ценах закрытия нет смысла - это будет работать только в тестере, где всё будет точно по этим ценам. В реальной жизни существуют проскальзывания и этот метод будет неправильным...
Вряд ли кто-то возьмётся сделать всё это бесплатно и даже недорого - это требует немалой работы и очень большой точности кода...
 
Последнее редактирование:
  • Like
Реакции: gush

gush

бродяга
Всё ещё в поисках... :) Это достаточно сложный алгоритм и осилить его самому с начальными знаниями программирования вряд ли удастся...
Здесь требуется полный анализ всей группы ордеров с запоминанием всех параметров каждого ордера - начиная от цены установки и до переходов отложенников в рыночные, как был закрыт этот рыночный - по СЛ, ТП или иным образом, с обновлением в памяти этих отработавших и заменённых ордеров да и немало других анализов.
Основываться только на ценах установки отложенников и ценах закрытия нет смысла - это будет работать только в тестере, где всё будет точно по этим ценам. В реальной жизни существуют проскальзывания и этот метод будет неправильным...
Вряд ли кто-то возьмётся сделать всё это бесплатно и даже недорого - это требует немалой работы и очень большой точности кода...

придумал гораздо проще.. в доработку один сов закину..
 

hoz

Активный участник
а много строчек займет такой код? Просто ордер ставить на место, без всяких наваротов..

На самом деле это пишется за минут 5 на полном расслабоне. Но нужно иметь базовые знания хотябы. По-скольку у меня всё на классах, могу описать на словах.
В общем. Перебираешь ордера в истории по циклу (for). Отбираешь в цике свои ордера (если мэджик или типа не соответствуюет - отбрасываешь их из отбора). Так же, если интересуют только закрытые позиции, то нужно проверить их на время закрытия. А дальше каждому отобранному ордеру присваиваем некоторое действие. Всё элементарно.
Начните писать, подскажем... А если вообще писать нет желание, тогда во фриланс.
 
  • Like
Реакции: gush

gush

бродяга
На самом деле это пишется за минут 5 на полном расслабоне. Но нужно иметь базовые знания хотябы. По-скольку у меня всё на классах, могу описать на словах.
В общем. Перебираешь ордера в истории по циклу (for). Отбираешь в цике свои ордера (если мэджик или типа не соответствуюет - отбрасываешь их из отбора). Так же, если интересуют только закрытые позиции, то нужно проверить их на время закрытия. А дальше каждому отобранному ордеру присваиваем некоторое действие. Всё элементарно.
Начните писать, подскажем... А если вообще писать нет желание, тогда во фриланс.

спасибо, задачка уже решена ;)
 

Viko2000

Почетный гражданин
Код свой, или цельнотянутый?
Изобрази код, а там и пособят, а то с эмоциями никто работать не будет.
Про теорию, не совсем понятно, как и про крышу у брокера впрочем.
Чудес короче, не бывает.

Нашёл проблему. ):) На реальных счётах, где на протяжении всей его жизни менялся баланс, плюс, 0, плюс, 0, вот этот код начинает не корректно работать. А именно на сколько я понял, как только цена касается отложки, и даже если прибыль в 0 и выше, тут же исполняется условие. Во как.

if (AccountEquity()>=AccountBalance()+AccountBalance()/100*PercentProfit)
{Close_all();
}
как только убираю этот код, закрытие не происходит и бот работает дальше.
Так как же будет выглядеть правильно закрытие всего по проценту прибыли Эквити.
SERG подскажи плиз, если в курсе.:please:
 

hoz

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

PHP:
//+---------------------------------------------------------------------------------------------------------------------------------------+
//|                                          Определение наличия увеличивающегося размера бара                                            |
//+---------------------------------------------------------------------------------------------------------------------------------------+
bool ExistencePositiveSequence (int fi_Index)
{
   if (High[fi_Index] > High[fi_Index + 1])
   {
      sequenceCount++;
      
      return (true);
   }
   sequenceCount = 0;
   
   return (false);
}
//+---------------------------------------------------------------------------------------------------------------------------------------+
//|                                               Custom indicator iteration function                                                     |
//+---------------------------------------------------------------------------------------------------------------------------------------+
int OnCalculate (const int rates_total,         // размер входных таймсерий
                 const int prev_calculated,     // обработано баров на предыдущем вызове
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
{
   int limit = rates_total - prev_calculated;
   
   if (prev_calculated == 0) limit--;
   
   else limit++;
   
   for (int i = 0; i < limit; i++)
   {
      if (ExistencePositiveSequence (i) == true)
      {  
         if (sequenceCount == 3)
           CDraw.DrawObject (_Symbol, _Period,  OBJ_ARROW_UP, i, Time[i], Open[i]);
      }
   }
   
   return (rates_total);
}

Прошу критики.
Целый код прикрепляю. Просьба не обращать внимания на классы рисования объектов. А только на логику поиска.
 

Вложения

  • MaxSizeOfSequenceBars.mq4
    4,2 КБ · Просмотры: 24
Последнее редактирование модератором:

_SERG_

Активный участник
Нашёл проблему. ):) На реальных счётах, где на протяжении всей его жизни менялся баланс, плюс, 0, плюс, 0, вот этот код начинает не корректно работать. А именно на сколько я понял, как только цена касается отложки, и даже если прибыль в 0 и выше, тут же исполняется условие. Во как.

if (AccountEquity()>=AccountBalance()+AccountBalance()/100*PercentProfit)
{Close_all();
}
как только убираю этот код, закрытие не происходит и бот работает дальше.
Так как же будет выглядеть правильно закрытие всего по проценту прибыли Эквити.
SERG подскажи плиз, если в курсе.:please:

В реальных условиях, я бы добавил некий буфер в пунктах или процентах, или заранее просчитал ценовой уровень, соответстующий (AccountBalance()+AccountBalance()/100*PercentProfit) и туда установил стоп ордера, в зависимости от комбинации открытих позиций.
Если в стратегии используется много ордеров, то по рынку не все закроются с планируемым профитом, если не много, то можно и по рынку закрывать.
И все даблы сравнивать в нормализованном виде как минимум.
А вместо Close_all(); встввь алерт для начала.

( P.S. Я не совсем понял, о чём you спрашивал.)
 
Последнее редактирование:

vlad_123

Местный знаток
Появился вопрос. Я как-то раньше подобное делал, но что-то туплю последние пару дней. Нужно определить является ли текущий бар самым большим по размеру за последние N-баров или нет.
iHighest и мануал в помощь.

Как это в плане производительности оптимально определить? Я так понимаю лучше реализация индюком, чтоб не пересчитывать каждый раз все бары. Но вот чутка задумался. Мой вариант вот:
...

Целый код прикрепляю. Просьба не обращать внимания на классы рисования объектов. А только на логику поиска.
Приведенный код никак не связан логически с заданным вопросом. Он просто рисует стрелку для каждой серии из трех баров с увеличивающимся хаем.
Да и буфер MaxSize индикатора - никак не рассчитывается.
 

hoz

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

Приведенный код никак не связан логически с заданным вопросом. Он просто рисует стрелку для каждой серии из трех баров с увеличивающимся хаем.
Да и буфер MaxSize индикатора - никак не рассчитывается.
Согласен. Буфер MaxSize, на данный момент, не используется. Но лишь потому, что мне нада написать условие, чтоб стрелка рисовалась после 3 увеличивающихся хаём баров. А дальше уже займусь передачей в буфер данных.

На данный момент, вся логика просто:

PHP:
//+---------------------------------------------------------------------------------------------------------------------------------------+
//|                                          Определение наличия увеличивающегося размера бара                                            |
//+---------------------------------------------------------------------------------------------------------------------------------------+
bool ExistencePositiveSequence (int fi_Index)
{
   if (High[fi_Index] > High[fi_Index - 1])
   {
      sequenceCount++;
      
      return (true);
   }

   sequenceCount = 0;
      
   return (false);
}
//+---------------------------------------------------------------------------------------------------------------------------------------+
//|                                               Custom indicator iteration function                                                     |
//+---------------------------------------------------------------------------------------------------------------------------------------+
int OnCalculate (const int rates_total,         // размер входных таймсерий
                 const int prev_calculated,     // обработано баров на предыдущем вызове
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
{
   int limit = rates_total - prev_calculated;
   
   if (prev_calculated == 0) limit--;
   
   else limit++;
   
   for (int i = 0; i < limit; i++)
   {
      if (ExistencePositiveSequence (i) == true)
      {  
         if (sequenceCount == 3)
           CDraw.DrawObject (_Symbol, _Period,  OBJ_ARROW_UP, i, Time[i], Open[i]);
      }
   }
   
   return (rates_total);

Но стрелки то рисуются не там где нужно. Почему? Я вообще в шоке :facepalm:. Пишу вещи на порядок сложнее в логике, но индикаторов не писал раньше. И вот застрял на этом месте... Просьба направить в требуемом направлении..
 
Верх