Запуск скрипта через советник - страница 3

 
Dadas:


Есть ли способ запускать скрипт в цикле, контролируемом каким-то тикером, например, каждые 50 мс или что-то в этом роде?

Не по тикам MT4?


Я постараюсь ответить на этот вопрос сам:

Это невозможно, потому что функция start() запускается по новым котировкам, что означает тики брокера.

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

Вот почему вы не можете выиграть у брокера!

Хотя, когда я запускал своего советника как скрипт:

int start() {

while(1==1) {

MyEA();

}
}

мой компьютер начал лагать из-за этого цикла.

Я пробовал это в воскресенье, поэтому рынок был закрыт.

 
Dadas:


Итак, советник может работать как скрипт? В цикле?

Только вот при бесконечном цикле компьютер в конце концов сломается.

Есть ли способ запускать скрипт в цикле, контролируемом каким-то тикером, например, каждые 50 мс или что-то в этом роде?

Не по тикам MT4?


Скрипт запускается один раз, если вы не добавляете конечный/бесконечный цикл в его функцию start(). Если вы хотите запускать скрипт по собственному сгенерированному тику, то сделайте его советником и поместите на автономный график.
 
Dadas:


Хотя, когда я запускал своего советника как скрипт:

мой компьютер начал лагать из-за этого цикла.


Ваш компьютер нуждается в модернизации... или замене.
 
RaptorUK:

Ваш компьютер нуждается в модернизации ... или замене.

Это совершенно верно! Он старый.
 
RaptorUK:

Скрипт запускается один раз, если вы не добавляете конечный/бесконечный цикл в его функцию start(). Если вы хотите запускать скрипт по собственному сгенерированному тику, то сделайте советника и поставьте его на автономный график.

Я не могу торговать на автономном графике.
 
Dadas:

Я не могу торговать на автономном графике.
Почему?
 

Dadas 2012.08.12 16:34
Дадас:


Есть ли способ запускать скрипт в цикле, контролируемом каким-то тикером, например, каждые 50 мс или что-то в этом роде?

Не по тикам МТ4?


Я постараюсь ответить на этот вопрос сам:

Это невозможно, потому что функция start() запускается по новым котировкам, то есть по тикам брокера.

Поэтому, даже если у вас есть цикл внутри функции start(), он зацикливается только при поступлении нового тика.

Вот почему вы не можете выиграть у брокера!

Хотя, когда я запускал своего советника как скрипт:

int start() {

while(1==1) {

MyEA();

}
}

мой компьютер начал лагать из-за этого цикла.

Я пробовал это в воскресенье, так что рынок был закрыт.

Привет Дадас,

Скрипт выполняется без тика, советник выполняется с тиком.

При использовании бесконечного цикла добавьте Sleep ()(https://docs.mql4.com/common/Sleep).

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

  int n;
  while (IsStopped() == false) // or while (true)
    {
    n++;
    Alert (n);
    
    Sleep (500); // add this !
    }

 
.
 
RaptorUK:
Почему нет?


Просветите меня, пожалуйста!

Как я могу торговать в реальном времени на автономном графике?

 
onewithzachy:

Привет, Дадас,

Скрипт выполняется без тика, советник выполняется с тиком.

При использовании бесконечного цикла добавьте Sleep ()(https://docs.mql4.com/common/Sleep).

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


Большое спасибо!

Это так просто, я должен был додуматься до этого сам...

Устал, я спрашиваю....... Как мой старый компьютер - LOL!

Хотя, знаете, я думал немного о другом.

Я думаю о том, как отменить тикирование в реальной торговле MT4!

Дело в том, что при реальной торговле тики управляют советником, а значит и брокером.

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

Помимо реквот (с которыми я не могу ничего сделать, кроме как сменить брокера), слишком часто случается так, что я вижу на своем графике.

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

Если я напишу в своем советнике:

if(AccountProfit()>0) { CloseAllOrders(); }

то я хочу, чтобы он закрылся с прибылью в 1 пип или больше. Я не ожидаю, что он будет висеть на 1 пипсе и ничего не делать!

BTW, я торгую с фиксированным спредом в 1 пипс на EURUSD.

Поэтому мне не нужно очевидное, и Sleep() также не является решением, кроме как для автономного обратного тестирования.

BTW, любое обратное тестирование ни на что не годится - это не тестирование в реальном времени.

Ну, это хорошо для некоторых наблюдений и изучения графиков, чтобы узнать много нового!

Но в реальном времени вы не знаете будущего, и вы будете совершать ошибки - если только вы действительно не доверяете своему советнику!

Доверять ему больше, чем тому, что вы видите на графиках! - Это самое сложное!

Так что, ребята, пожалуйста, читайте мои посты с пониманием!