Советник закрывает сделки, когда он увеличит Эквити на n долларов. Как реализовать, если в соседнем окне работает другой советник. Советник должен учитывать только свое увеличение эквити. - страница 4
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
У меня есть одна привычка, такая особенная и я тем более рассеянный, привычка не дочитывать все до конца, то есть, эта привычка оптимиста, желания которого, говорят ему, что стакан на половину полон, и можно идти дальше. Но иногда она помогает, и именно в предвидении ситуации, то есть, забегать на перед. И она же говорит, о том, что у меня математический склад ума, а рассеянность, говорит, о том, что я думаю образно, то есть, широко. А вот в мелочах допускаю ошибки, так как они уже не интересны. А вот программирование меня сильно выручает по поводу концентрации идеи в нужном направлении. А разбираться с побитовыми операциями надо учиться, все программисты в своих кодах используют побитовую систему, и если ты видишь набор цифр, то там обычные условия, это своего рода скачек, через незнающих - к знающим. Для полного контроля напиши в Init() и присвой времени этот магический номер с каким в последствии будешь работать, там как запустится робот на исполнение, это время будет будет присвоено только этому магику и что с ним будет происходить дальше по коду, будет происходить только с ним. Удачи.
Лично я Init() в обще стараюсь не использовать, если только какие данные нужны в журнале, о брокере и все. Напиши функцию пользовательскую простенькую и пользуйся ей всегда и все.
а зачем забивать в глобальную переменную если можно сделать функцию и 1 раз запускать ее при запуске советника
И опять я не пойму, а зачем Вам все это на третей странице здесь указано Init() и DeInit(), для чего Вам нужен какой-то код? Допустим, Вы запускаете один и тот же советник на двух валютных парах EUR/USD и GBP/USD, что надо сделать, прежде чем два советника работали каждый по своему. Это изменить в настройках одному советнику магик и все. У одного он будет №1, а у другого №2 и все, и не надо ни чего выдумывать лишнего. Функция инит больше предназначена для написания графических объектов, и деинит убирает их с графика и все. Инит выводит на график, деинит убирает с графика. Не лезьте туда совсем. Если Ваш робот не рисует что-либо на графике, то и делать там нечего. Забудьте об этих функциях совсем. Все происходит в функции OnTick(), все что Вам нужно должно быть здесь, если Вы создали пользовательскую функцию, то для ее работы надо объявить ее в функции OnTick(), если Вы ее объявите в OnInit(), то она отработав один раз и уйдет, как медведь в спячку, и Вам придется постоянно компилировать свой код, что бы она работала. Сложно, но бывает. Сложно постоянно писать и везде OrderMagicNumber(), бывает, а без функции OrderSelect() фактически ни чего сделать с ордерами нельзя. Так что увы, но есть указание с верху, писать и составлять код так - как мы его Вам указали, иначе компиляции не подлежит, или подлежит, но происходить ни чего не будет. Так что ОрдерСелект надо писать везде, где касается ордеров.
Давайте пройдем в школьную программу.
int a = 3;
int b =5;
if(Ask>MovingAverage){ a=a+b;}
И вот, пока условия не будут истина "а" будет равняться трем. То есть если Ask гуляет ниже MovingAverage, то и "а" равно трем, как только Ask будет больше MovingAverage, условия встанут истинными и исполнится код прописанный в фигурных скобках, произойдет сложение чисел и переменной "а" будет присвоено число восемь. В функции OnTick() происходит все с каждым тиком. Произошел еще один тик, опять начинается проверка, а=3 - хорошо, b=5 - хорошо, if(Ask>MovingAverage) - больше - хорошо, а=8 - хорошо. Через какое-то время Ask опустилась ниже MovingAverage, пошел еще один тик, какому числу будет равно "a"? Но если Вы в OnInit(), присвоите int а=3; а в OnTick() напишете int b=5; if(Ask>MovingAverage), то а всегда будет принимать новое значение, так как к ней всегда будет прибавляться b, своего рода будет создан цикл. А Вам это надо?! В функции OnInit() используется только то, что должно произойти один раз при запуске программы. И все. А вот если Вы хотите, что бы число постоянно менялось, то 8, то 3, то надо немного дописать: if(Ask>MovingAverage){a=b+a;}else{a=3;}. Удачи ребят, и проверяйте все задумки в журнале Print(" ");. и просматривайте его. Alert быстрый и не лично не для меня, я пользуюсь журналом, все идеи вначале вывожу в журнал. Как-то так?!
а зачем забивать в глобальную переменную если можно сделать функцию и 1 раз запускать ее при запуске советника
Подожди, не мешай человеку выплёскивать свои знания наружу, они его распирают. Не дай Бог лопнет...
Допустим, Вы запускаете один и тот же советник на двух валютных парах EUR/USD и GBP/USD, что надо сделать, прежде чем два советника работали каждый по своему. Это изменить в настройках одному советнику магик и все. У одного он будет №1, а у другого №2 и все, и не надо ни чего выдумывать лишнего.
А с одним магиком но проверить Symbol ордера, разве нельзя работать?