Проблема с кодом эксперта 2 (менеджер SL) - страница 2

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- Форексный VPS бесплатно на 24 часа
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Привет, Раптор, еще раз спасибо.
1. Это единственная проблема с приведенным выше кодом? Я думаю, что в худшем случае PendingOrderTicket_1 не будет модифицирован и закроется на своем SL.
2. Все ли в порядке с тем, как я использовал функцию OrderSelect?
Я думаю, что у меня будет большая проблема в том, что когда OrderTicket_1 преодолеет первый Gap_Level1, он все равно будет модифицировать ордер ПО КАЖДОМУ ТЫКУ, когда этот критерий будет выполнен.
3. Так ли это? Если да, то исправит ли это приведенный ниже код?
Еще раз спасибо ;)
1. Это просто то, что бросилось мне в глаза, что будет ломать ваш код.
2. Ваш OrderSelect неправильный ( https://docs.mql4.com/trading/OrderSelect ), если вы собираетесь выбирать по номеру билета, вы должны использовать SELECT_BY_TICKET , а не SELECT_BY_POS.
3. Я так не думаю, то, что вы сделали, я думаю, будет означать, что эта функция будет вызвана только один раз ... что произойдет, когда у вас будет следующий ордер, который нужно изменить? что произойдет, если у вас есть два ордера, открытых в то же время?
Я не знаю на 100%, что вы делаете, у меня нет времени изучить ваш код достаточно подробно, чтобы сделать это... но у меня есть вопрос.
Не можете ли вы посмотреть на OrderOpenPrice(), OrderStopLoss() и OrderTakeProfit() ордера и определить, был ли он уже изменен на уровень 1 2 или 3?
1. Это просто то, что бросилось мне в глаза, что сломает ваш код.
2. Ваш OrderSelect неправильный ( https://docs.mql4.com/trading/OrderSelect ), если вы собираетесь выбирать по номеру билета, вы должны использовать SELECT_BY_TICKET , а не SELECT_BY_POS.
3. Я так не думаю, то, что вы сделали, я думаю, будет означать, что эта функция будет вызвана только один раз ... что произойдет, когда у вас будет следующий ордер, который нужно изменить? что произойдет, если у вас есть два ордера, открытых в то же время?
Я не знаю на 100%, что вы делаете, у меня нет времени изучить ваш код достаточно подробно, чтобы сделать это... но у меня есть вопрос.
Не можете ли вы посмотреть на OrderOpenPrice(), OrderStopLoss() и OrderTakeProfit() ордера и определить, был ли он уже изменен на уровень 1 2 или 3?
Спасибо, Raptor, ваше понимание было очень полезным для меня...
Я полностью понимаю, что такое нехватка времени, ваше время и советы были очень ценны. Я не пытался просить кого-то написать это за меня, поэтому я не вдавался в подробности... что создает проблему, что без подробностей трудно предложить помощь, так что извините...... В данном случае меня больше волновал код, который я изучал, и ваши советы мне очень помогли.
1. Я пытался собрать его для тестирования, так что я могу решить проблему с отключением питания позже, когда буду более опытным.
2. Я перейду на SELECT_BY_TICKET, а не POS, большое спасибо.
3. Я действительно хочу, чтобы GAP_Level1 вызывался только один раз, так что, возможно, я прав с тем, как я собрал все это вместе. Чтобы ответить на ваш вопрос, я пытаюсь посмотреть на билет последнего отложенного ордера, чтобы увидеть, перейдет ли он через мою отметку TradeUp. Когда это произойдет, я хочу, чтобы он перетащил все мои предыдущие ордера вверх (на этот раз выбирая по магическому числу, чтобы получить их все)... На этом этапе у меня открыт еще один отложенный ордер, и когда он достигнет уровня Gap_Level2, у меня будет блок BuyModify_Level2 с тем же кодом..... Правдоподобно???
Я надеюсь, что я пишу со своей логикой, я действительно сел с бумагой, как вы предложили в этот раз, чтобы все обдумать... ;)
3. Я хочу, чтобы GAP_Level1 вызывался только один раз, поэтому, возможно, я прав в том, как я соединил все это вместе. Чтобы ответить на ваш вопрос, я пытаюсь посмотреть на билет последнего отложенного ордера, чтобы увидеть, перейдет ли он через мою отметку TradeUp. Когда это произойдет, я хочу, чтобы он перетащил все мои предыдущие ордера вверх (на этот раз выбирая по магическому числу, чтобы получить их все)... На этом этапе у меня открыт еще один отложенный ордер, и когда он достигнет уровня Gap_Level2, у меня будет блок BuyModify_Level2 с тем же кодом..... Правдоподобно???
Как (или где в вашем коде) вы установите HasBeenExecuted = false ; чтобы IfGap_Level_1() выполнялась для второго набора сделок?
Хороший вопрос, приятель.
Я собирался сделать bool эту переменную в начале внутренних переменных под теми, которые я экспортирую. Я собирался сделать GAP_Level_1, GAP_Level_2, GAP_Level_3, GAP_Level_4, GAP_Level_5 и т.д. Таким образом, как только он достигнет GAP_Level_1, он может забыть об этом первом уровне пробелов.
Ваше замечание заставило меня задуматься, спасибо. Теперь я действительно вижу проблему.
Я понял, что когда сделка достигает SL и начинается заново, я хочу, чтобы первая сделка снова искала Gap_Level_1 и вращалась через него. И, черт возьми, это вызовет проблему, поскольку я собирался связать PendingOrder_1 с GAP_Level_1, PendingOrderLevel_Level_2 с GAP_Level2.
Думаю, я все еще могу это провернуть, но я бы не подумал об этом, если бы вы не упомянули......
Я могу придумать три обходных пути... Первый подходит для моего мозга немного лучше, хаха ;)
1. если я пойду по пути IF LAST TRADE IS LOSS, то удалю все отложенные ордера, и перезапущу их, если сделка достигнет SL. Таким образом, если отложенный ордер 1 дойдет до уровня Gap Level_1, то это остановит Pending_Order5 как следующую открытую сделку, которая дойдет до GAP_Level5. После достижения SL все мои открытые сделки будут закрыты, поскольку все они имеют один и тот же SL, поэтому закрытие отложенных ордеров и перезапуск логики может быть нормальным.
2. Другой вариант, о котором я могу думать (благодаря вашей подсказке с моей другой проблемой кода несколько недель назад), это вставить булеву переменную после заключения первой сделки под названием NEWTRADE, а затем иметь блок IFNEWTRADE==1, затем перейти к GAP_Level1. Это наводит меня на мысль, что я мог бы сделать IFNEWTRADE1 в блоке отложенного ордера 1, IFNEWTRADE2 в блоке отложенного ордера 2 и так далее... затем IFNEWTRADE2==1 перейти на GAP_Level2.
EDIT (после кофе): 3. Я только что подумал, что если я отсортирую ордера по времени (теперь я знаю, что можно сортировать несколько ордеров множеством способов), и присвою промежуточную переменную ORD_SELECT_NUMBER, основанную на TIME. Затем после ORD_SELECT_NUMBER == 1, перейти на GAP_Level1, затем посмотреть на следующий ORD_SELECT_NUMBER, используя эту команду ORDER_SELECT_NUMBER ++.
Я могу писать советников с одним ордером, основанным на сигналах и т.д., просто эти вещи с несколькими ордерами меня просто убивают... Мой советник на самом деле работает как есть, и получает хорошие результаты, он просто безумен в использовании, поскольку он изменяется на КАЖДОМ тике, и просто использует мой самый маленький Gap_Level в настоящее время, очевидно, поскольку я работаю над тем, как связать все это вместе выше...
Вау, но спасибо еще раз, Raptor, помимо ЗНАНИЯ КОДИРОВАНИЯ я вижу, насколько важна хорошая ЛОГИКА, спасибо, что заставил меня задуматься.
Вау, но спасибо еще раз, Raptor, наряду с КОДИРОВАНИЕМ ЗНАНИЙ я вижу, насколько важна хорошая ЛОГИКА, спасибо, что заставили меня задуматься.
Вы неправильно поняли... все программное обеспечение, независимо от того, на каком языке оно написано, C++, Perl, Pascal, Fortran, Assembler и т.д., просто решает проблемы. Если логика, лежащая в основе вашего решения, несовершенна, то не имеет значения, насколько хорошим кодером вы являетесь... решение приходит первым, код приходит позже.
Я понимаю, о чем вы говорите... Строитель без планов строительства далеко не уйдет, даже если он самый лучший строитель в мире. Первоначальный план едва ли не важнее, я вас понимаю.
Вы очень помогли мне, Raptor, и я хотел еще раз сказать вам спасибо.
Я выбрал ленивый вариант 1.
Это были часы и часы программирования, мой советник около 85k (поэтому я разместил только фрагмент), так что я еще не отчитался, как я прошел после завершения этого динозавра. На данный момент мне везет, ордера выбираются правильно. Я учусь по ходу дела, так как это далеко от советников с одним ордером, которые я привык писать. Я прыгнул в воду с этим проектом и учусь плавать. Я отпишусь о том, как я продвигаюсь.
Еще раз спасибо, Раптор :)
Я понимаю, о чем вы говорите... Строитель без планов строительства далеко не уйдет, даже если он самый лучший строитель в мире. Первоначальный план едва ли не важнее, я вас понимаю.
Вы очень помогли мне, Raptor, и я хотел еще раз сказать вам спасибо.
Я выбрал ленивый вариант 1.
Это были часы и часы программирования, мой советник около 85k (поэтому я разместил только фрагмент), так что я еще не отчитался, как я прошел после завершения этого динозавра. На данный момент мне везет, ордера выбираются правильно. Я учусь по ходу дела, так как это далеко от советников с одним ордером, которые я привык писать. Я прыгнул в воду с этим проектом и учусь плавать. Я отпишусь о том, как я продвигаюсь.
Еще раз спасибо Raptor :)
Как только вы увидите, что вы расширяете свои ресурсы кода, и есть функции, которые можно сделать общими для любого будущего использования советника, подумайте об использовании библиотеки/include и т.д.
Bec. как только он вырастает в тираннозавра, ваши коды теряются в их собственном парке Юрайса, особенно когда они снова нужны для любого будущего использования.
Как только вы увидите, что ваши ресурсы кода расширяются, и есть функции, которые можно сделать общими для любого будущего использования советника, подумайте об использовании библиотеки/включений и т.д.
Бек. Как только он вырастет в тираннозавра, ваши коды потеряются в их собственном парке Юрайса, особенно когда они снова понадобятся вам для любого будущего использования.
Хаха, приятель, это меня рассмешило. Я понимаю, как это может произойти.
Если честно, я нашел библиотечную вставку под названием 'OrderSendReliable.mqh'. Я собираюсь сначала закончить этот советник, а затем собирался написать, как я использовал эту библиотечную вставку в другом посте о EAcode, который я собирался сделать, так как считаю, что это может исправить ситуацию с горячим рынком.
Я хихикал, потому что теперь я вижу, как с опытом, там будут все виды #includes в верхней части советника, хаха, и вы носите с собой 1мб кэш файлов для каждого советника.
Вы знаете, ваш комментарий заставил меня задуматься, он просто щелкнул. Я просто вырезаю и вставляю код между своими советниками, когда мне попадается {раздел}, который мне нравится, и связываю их (например, этот {раздел} с которым у меня были проблемы в другом посте, который я упоминал ранее). Я даже не думал сделать это библиотечной вставкой и просто ссылаться на нее... Я далек от таких вещей... Я как раз собирался начать свою первую библиотечную вставку после этого советника, чтобы посмотреть, как они работают.... возможности такие классные. Этот MQL вызывает привыкание.
О да, с моим кодом тоже все в порядке, он отлично работает для своей цели, я заглянул, чтобы поблагодарить :) ..
Я очень ценю вашу поддержку, ребята, жаль, что я не могу описать словами, насколько сильно ;)
Вы можете иметь свои собственные наборы "основных" библиотечных функций, которые я настоятельно рекомендую вам рассмотреть раньше, чем позже.
Я тоже начинал со своего первого советника, то же самое, копировать, вставлять, копировать, вставлять.....
Поворотным моментом стало то, что я делал этот советник для своего бывшего военного, уже вышедшего на пенсию. Это изменило все, я впервые начал использовать библиотеку.
Я храню эту библиотеку до сих пор. Если она может предложить вам идеи, помочь вам двигаться дальше... вот ее заголовок, приятель:
надеюсь, это поможет....
У вас могут быть свои собственные наборы "основных" библиотечных функций, которые я настоятельно рекомендую вам рассмотреть раньше, чем позже.
Я тоже начинал со своего первого советника, то же самое, копировать, вставлять, копировать, вставлять.....
Поворотным моментом стал момент, когда я делал этот советник для своего бывшего военного, уже вышедшего на пенсию. Это все изменило, я впервые начал использовать библиотеку.
Я храню эту библиотеку до сих пор. Если она может предложить вам идеи, помочь вам двигаться дальше... вот ее заголовок, приятель:
надеюсь, это поможет....
Привет, Diostar, это действительно круто, спасибо, что поделился этой информацией, я еще не читал о библиотеках. Похоже, это отличный способ носить с собой переменные и иметь их предопределенными на будущее. Я подумаю над этим. Мне нравится, что вы сказали "скорее раньше, чем позже", мне нравятся такие советы, спасибо, приятель. Это напоминает мне обучение игре на гитаре, когда 20 лет спустя я думаю, что хотел бы я сделать "так и так" с самого начала, это бы облегчило последние 20 лет, lol. Я серьезно изучу этот вопрос, спасибо.
Ах, когда я думал, что я в огне, у меня возникла драма, которую я не могу решить. У меня проблемы с выбором правильных порядков в этих двух соединительных секциях:
Я мог бы показать два моих примера и показать эффекты, но мой мозг просто не хочет нажать на эту кнопку...
Пример 1:
Прокручивает предыдущие заказы точно так, как я хочу, однако изменяет их на КАЖДОМ щелчке.
(первоначальная драма с выбором порядка, с которой мне помог Raptor, остановила конфликты уровней, так что SL не срабатывал по этой причине и раньше. Мне казалось, что с этой последней частью легко разобраться, но я уже несколько дней пытаюсь остановить это, пытаясь предотвратить каждый тик...).
Пример 2:
Этот пример - не то, что я хочу... Я попробовал этот вариант, чтобы он перестал модифицировать отправку на каждом тике... однако он не прокручивает ордера, а просто модифицирует один из правильных тиков на каждом тике (он модифицирует первый ордер, я полагаю, последний в кэше ордеров Index).
У меня есть еще 50 попыток, сначала я попробовал небольшую секцию IF EXECUTED 00, чтобы передать ее в IFGAP, если она не была выполнена раньше... однако мне не очень повезло вставить переключатель перед hand...... Возможно, я просто опубликую этот пример, чтобы показать этот вариант....
Пример 3:
С переключателем... он все еще имеет тот же эффект, что и пример 1. Он прокручивает заказы правильно, но все еще модифицируется при каждом нажатии...
Я вижу, что переключатель снова получает false, поэтому просто проходит через него снова... однако другие попытки не пропускают его вообще... должен ли я придерживаться этого варианта и попробовать объявить IfGap_SELLLevel_00AlreadyExe = true в другом месте, если да, то где?
Так что да, я действительно пытался, ребята, прежде чем беспокоить вас всех снова.... в течение часов и часов... Я снова потерялся...
Любая помощь или подсказки будут приняты с благодарностью ;)