Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 246
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Спасибо. Попробую. Не факт, что получится)
1. При открытие ордера нужно записать его Тикет в массив, если массив не занят(наверно =0), что бы потом от него в переборе вести отчет.
2. После закрытия ордера(может не закрытия), начат отчет профита закрытых ордеров. При достижения определенного профита, а именно : сумма профита + таке профит >= профита открытого ордера(назовём ордер 123), открытого раньше всех или с максимальным убытком (пока не решил).
3. при выполнении условий: "сумма профита + таке профит >= профита открытого ордера(назовём ордер 123)", ордер 123 закрывается, а массив обнуляется(наверно становится = 0 ).
1. Вы когда советник ставите, уже есть открытые и закрытые ордера, которые вы хотите учитывать или нет и работа советника каждый раз начинается без открытых ордеров и не учитывает закрытые ранее ордера?
2. Не понятен совсем. У вас несколько ордеров, при закрытии ордера считается профит общий суммированием и есть данные профита закрытого ордера. И есть данные профитов не закрытых ордеров, их можно посчитать. Что с чем сравнивается. Например есть 3 ордера. 1 закрытй, 2й закрывается, 3й открытый. Есть профиты Pr1, Pr2 и расчетный Pr3. Что с чем сравниваем. При этом мы понимаем что у не закрытого ордера мы не учитываем комиссии и свопы.
3. Вообще не понятно, если вы обнулите массив с тикетами, то дальше то как? В рынке же останутся рыночные ордера. Как их закрывать будете?
Вопрос: как удержать значение High бара a и Low бара b для того, чтобы соединить их линией индикатора?
Нужно ли создавать для этого ещё два дополнительных массива?
Да. Буферных массива.
То есть, получается, как в ЗигЗаге. А чтобы два из них не рисовали, надо применить какую-то специальную функцию?
1. Вы когда советник ставите, уже есть открытые и закрытые ордера, которые вы хотите учитывать или нет и работа советника каждый раз начинается без открытых ордеров и не учитывает закрытые ранее ордера?
2. Не понятен совсем. У вас несколько ордеров, при закрытии ордера считается профит общий суммированием и есть данные профита закрытого ордера. И есть данные профитов не закрытых ордеров, их можно посчитать. Что с чем сравнивается. Например есть 3 ордера. 1 закрытй, 2й закрывается, 3й открытый. Есть профиты Pr1, Pr2 и расчетный Pr3. Что с чем сравниваем. При этом мы понимаем что у не закрытого ордера мы не учитываем комиссии и свопы.
3. Вообще не понятно, если вы обнулите массив с тикетами, то дальше то как? В рынке же останутся рыночные ордера. Как их закрывать будете?
Еще раз )))
Есть открытые ордера, предположим 5 штук, все минусовые. Самый первый из них (123) с лотом 0.5, но он пошел в минус. Открываем новый ордер(456) с лотом 0.1, тикет этого ордера и записываем в массив при открытии. Далее идет еще серия ордеров таким же лотом, что-то в плюс, что-то в минус. Но ордер 123 остается минусовым и открытым. Как только профит всех закрытых ордеров после ордера 456( он тоже закрыт) будет больше чем профит ордера 123, находим ордер 123, поскольку он первый и еще открыт и закрываем его, и обнуляем массив.
Есть несколько открытых ордеров, открываем еще один при определенных условиях. Предположим if ordertotal>=5
ordersend (тикет 456)
если ордер успешно отрыт
если массив не занят
тикет 456 записываем в массив
ордер 456 закрылся по профиту( не важно какой плюс или минус), следом были открыты другие ордера и закрыты, но в массиве хранится тикет 456.
CalCloseProfi () - функция проверяет профит закрытых ордеров
перебирает закрытые ордера по магику, бай, селл, начиная с ордера с тикетом 456(взятого из массива) и вверх, и считает их профит
FirstOrder() -функция ищет среди открытых ордеров первый открытий( по идее должна найти 123))
если профит CalCloseProfi > FirstOrder, то ордер 123 закрываем и обнуляем массив, чтобы потом при выполнении условий он опять туда мог записать тикет.
Не знаю как еще объяснить)
Условия при которых будут выполняться это функции могу написать, но не сталкивался с массивами.
Нужен пример, как запихнуть инфу в массив, а именно OrederTicket при открытии, и как потом ее достать.
Желательно использовать Двойной массив, в одну его часть записать магик, чтобы при работе на одном счете при разных настройках не перемешались(а может и не надо, не силен в массивах)
Заранее спасибо
Еще раз )))
Есть открытые ордера, предположим 5 штук, все минусовые. Самый первый из них (123) с лотом 0.5, но он пошел в минус. Открываем новый ордер(456) с лотом 0.1, тикет этого ордера и записываем в массив при открытии. Далее идет еще серия ордеров таким же лотом, что-то в плюс, что-то в минус. Но ордер 123 остается минусовым и открытым. Как только профит всех закрытых ордеров после ордера 456( он тоже закрыт) будет больше чем профит ордера 123, находим ордер 123, поскольку он первый и еще открыт и закрываем его, и обнуляем массив.
Есть несколько открытых ордеров, открываем еще один при определенных условиях. Предположим if ordertotal>=5
ordersend (тикет 456)
если ордер успешно отрыт
если массив не занят
тикет 456 записываем в массив
ордер 456 закрылся по профиту( не важно какой плюс или минус), следом были открыты другие ордера и закрыты, но в массиве хранится тикет 456.
CalCloseProfi () - функция проверяет профит закрытых ордеров
перебирает закрытые ордера по магику, бай, селл, начиная с ордера с тикетом 456(взятого из массива) и вверх, и считает их профит
FirstOrder() -функция ищет среди открытых ордеров первый открытий( по идее должна найти 123))
если профит CalCloseProfi > FirstOrder, то ордер 123 закрываем и обнуляем массив, чтобы потом при выполнении условий он опять туда мог записать тикет.
Не знаю как еще объяснить)
Условия при которых будут выполняться это функции могу написать, но не сталкивался с массивами.
Нужен пример, как запихнуть инфу в массив, а именно OrederTicket при открытии, и как потом ее достать.
Желательно использовать Двойной массив, в одну его часть записать магик, чтобы при работе на одном счете при разных настройках не перемешались(а может и не надо, не силен в массивах)
Заранее спасибо
Добрый день. Подскажите почему ошибку выдает: array out of range in '.......' (152,41)
ticket = OrderSend (Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, tpl, Magic, 0, Red);
if (ticket <1)
{
Print("Ошибка открытия на продажу");
}
if (ticket >1 && SaveTick[1] <= 0 && SaveTick[0] == Magic)
{
FindTicket();
Print(" Тикет ордера: ", FindTicket(), " Массив ордера: ", SaveTick[1], " Магик массива: ", SaveTick[0]);
}
int FindTicket()
{
int oldticket;
int tick=0;
ticket=0;
ArrayResize( SaveTick, 2 );
for(int cnt = OrdersTotal ()-1; cnt>=0; cnt--)
{
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
oldticket = OrderTicket();
if (oldticket > ticket)
{
ticket = oldticket;
tick = OrderTicket();
SaveTick[1] = tick;
SaveTick[0] = Magic;
}
}
}
}
return(tick);
}
Добрый день. Подскажите почему ошибку выдает: array out of range in '.......' (152,41)
Вставляйте код правильно, альт S или по иконке, подсказка код.
А зачем вам массив SaveTick?
Вы используете только 2 элемента массива. Замените их на глобальные или статик переменные, если объявляете в функции.
Не разумно для 2х переменных использовать массив.
И судя по всему, вы вызываете массивы до вызова функции FindTicket() в которой задается размер массива SaveTick. И происходит выход за пределы массива.