[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 385

 
granit77:
Виктор, ты не прав. Благодаря этой, несколько затянутой дискуссии, два программиста попутно отвечали на вопросы новичков, что пошло ветке только на пользу :))

Ну, я с удовольствием почитал. И было очень показательным отношение продвинутых (не знаю как уже вас теперь называть программистами или нет - запутался совсем теперь : )) ) - скажем так - специалистов, решающих продвинутые задачи : )) и их взгляды на, казалось бы, простые на первый взгляд задачи. Искренне надеюсь, что это без эмоциональных последствий дискуссия и дружеская, не смотря на все разногласия. У меня, к сожалению, разногласия (неразрешенности) тоже остались. Но я как раз тут исповедую философский подход. Если решение задачи таким путем не очевидно, значит, нужно найти иной путь. Но знать о проблематике очень полезно.

Спасибо Вам большое за дискуссию. Жалко, что не пришли к консенсусу. (Но, консенсус пока не сложился... (вспоминается песня "Там, вдали, у метро"))

И жаль, конечно, что на мои с Арлесом вопросы, не было очевидных ответов. Думаю, эти вопросы не только у нас с ним, но и у многих менее опытных спецов, которым сложно выстраивать самостоятельно и потоки и в.т., и именно поэтому они обращаются к написанным продвинутыми специалистами программам и оболочкам.

Ну, ничего. Со временем и эти вопросы разрулим. : )) Спасибо Вам большое за Ваши старания. Ведь позитивный настрой, в итоге, у всех сторон (хотя и расходящийся по способам решения). И это радует.

Кстати, в своих педагогических изысканиях я часто говорю: не все вопросы могут быть разрешены, мы часто не знаем на все ответы; поэтому они могут пока... остаться открытыми. (я пытаюсь найти деликатную концовку обсуждения) Еще раз Спасибо!
 
Нужна помощь 1 как узнать цену верхнего открытого или отложенного ордера sell 2 как проверить есть ли по указанной мной цене открытый или отложенный ордер sell
 

Сергей, какие вопросы были неразрешены? Если это:

Chiripaha:

Т.е. отвечая на вопрос Arles , если у меня один советник произвел учет ордеров и на время "вздремнул" то в этот момент другой советник не перешедший границ выделенных средств (предположим 80% от депозита - в обоих советниках такой размер будет) выставит ордер (войдет в сделку по рынку). И когда 1-ый возобновит работу (а терминал по управлению капиталом уже был посчитан накануне), то он тоже может открыть сделку уже превышающую выделенные лимиты советником?

Если эту сит-ию (гипотетически) размножить на несколько советников, то может возникнуть такая, где Риск-Менеджмент окажется в критической сит-ии?

Я правильно понимаю данную многопоточность? - Если так, то с финансовой точки зрения это, конечно, бардак. Но, т.к. вероятность такового невелика на маленьких счетах, то это лишь гипотетически. А на больших счетах, наверное будут сами писать что-то. Но, все-таки, получается что это так?

И у меня вопрос - это официальная позиция или это лишь предположение и опыты наподобие моих?

 То на 378 странице есть код. Вот ещё раз:

#property show_inputs

extern int Pause = 1000;

int    hwndChart = NULL; // Уникальный идентификатор скрипта.
string sName = "Condition";

void init()
 {
  hwndChart = WindowHandle(Symbol(), 0);
  // Создаём глобальную переменную синхронизации скриптов.
  if (!GlobalVariableCheck(sName)) GlobalVariableSet(sName, 0);
 }
 
void deinit()
 {
  GlobalVariableDel(sName);
 }

void start()
 {
  while (!IsStopped())
   {// Начало блока синхронизации.
    GlobalVariableSetOnCondition(sName, hwndChart, 0);
    if (GlobalVariableGet(sName) == hwndChart)
     {
      Print("Start");
      Sleep(Pause); // Имитация работы.
      Print("End");
     }
    GlobalVariableSetOnCondition(sName, 0, hwndChart);
    // Завершение блока синхронизации.
    Sleep(200);
   }
 }
Там, где задержка "имитация работы" вставляете обращение к депозиту или к другому ресурсу.

Этот блок синхронизации можно в функцию превратить и поместить в библиотеку. Будет у Вас синхронная функция обращения к депозиту из любого советника.

 
Вместо индекса подставить хендл окна графика
 
FAQ:
Вместо индекса подставить хендл окна графика

Точно! А то с индексами не сразу сообразишь, что к чему.

Переделал.

===================

Хотя, индексация позволит правильно удалить глобальную переменную.

Надо бы в деините сделать декремент индекса. И удалять глобальную переменную, когда индекс равен нулю.

Только такой декремент не позволит дозагрузить скрипт после удаления. Индексы перепутаются.

Надо делать глобальный массив индексов всех модулей, что обращаются к ресурсу. Ну, и работать с ним.

Ещё можно сделать две глобальные переменные. Одна с последним индексом, другая с текущим количеством модулей. Индексы только увеличиваются. Пожалуй, это проще будет.

Или совсем не заморачиваться с глобальное переменной. Вручную удалять перед первым запуском.

 
это будет исправно работать до первого сбоя в деините, когда експерт не декрементирует общий счетчик
 
Придумал! Надо выходить тоже синхронно. В деините ждать своей очереди и выйти с обнулением глобальной переменной. Обращение к ресурсу кратковременное, то это нормально в деините пройдёт.
 

1) Задача : каждый скрипт (советник) должен знать о наличии всех остальных.

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

3) Решение :

Каждый эксп организует 1 глобалку с именем - общий префикс + хендл окна + символ. значение глобалки - время последнего тика по этому инструменту. 2 общую глобалку со своим хендлом (после того как отработает пишет в нее свой хендл или обнуляет если самый старший)

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

в каждом экспе создаем три массива (за неимением структур) - символ\хендл\последнее время доступа\ время последнего тика.

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

очередь восстанавливается 

реально это будет делать эксп который стоит на самом активном графике (частые тики).

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

максимальный пропуск - один тик. 

ЗЫ. а вообще лучше делать один мультивалютник 

 
Zhunko:

Сергей, какие вопросы были неразрешены? Если это:

 То на 378 странице есть код. Вот ещё раз:

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

Этот блок синхронизации можно в функцию превратить и поместить в библиотеку. Будет у Вас синхронная функция обращения к депозиту из любого советника.

Это блок атомарного доступа и никакой синхронизации. Обращаться только к депозиту так нет смысла. Вызов любой из функций параметров депозита сам по себе будет атомарным, без всяких накрутов. Если делать атомарно, то всю работу советника. Вот так вот вы и решаете задачи - думаете, что что-то сделали, а на самом деле - иллюзию.

 
FAQ:

1) Задача : каждый скрипт (советник) должен знать о наличии всех остальных.

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

3) Решение :

Каждый эксп организует 1 глобалку с именем - общий префикс + хендл окна + символ. значение глобалки - время последнего тика по этому инструменту. 2 общую глобалку со своим хендлом (после того как отработает пишет в нее свой хендл или обнуляет если самый старший)

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

в каждом экспе создаем три массива (за неимением структур) - символ\хендл\последнее время доступа\ время последнего тика.

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

очередь восстанавливается 

реально это будет делать эксп который стоит на самом активном графике (частые тики).

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

максимальный пропуск - один тик. 

ЗЫ. а вообще лучше делать один мультивалютник 


Он не поймет, слишком сверху плохо видно))) У меня решена эта задача примерно в таком стиле. Приятно, что есть кто-то, кто въехал в суть задачи. Только у меня еще очередь выстраивается, в каком порядке начали задачи выполняться в такой и выполняются дальше по кругу.