Помогите пожалуйста, сделать вот эту функцию наоборот:
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 11.09.2008 |//| Описание : Перенос уровня стопа в безубыток |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ( "" - любой символ, |//| NULL - текущий символ) |//| op - операция ( -1 - любая позиция) |//| mn - MagicNumber ( -1 - любой магик) |//| Кроме того, функция MovingInWL() предполагает наличие глобальных переменных (внешних параметров скрипта или советника)://| int LevelProfit - Уровень профита в пунктах, которого должна достигнуть позиция для того, чтобы её стоп был перенесён на уровень безубытка.//| int LevelWLoss - Уровень безубытка в пунктах, на который будет перенесён стоп позиции после того, как её профит достигнет уровня LevelProfit в пунктах.//+----------------------------------------------------------------------------+void MovingInWL(string sy="", int op=-1, int mn=-1) {
double po, pp;
int i, k=OrdersTotal();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
po=MarketInfo(OrderSymbol(), MODE_POINT);
if (OrderType()==OP_BUY) {
if (OrderStopLoss()-OrderOpenPrice()<LevelWLoss*po) {
pp=MarketInfo(OrderSymbol(), MODE_BID);
if (pp-OrderOpenPrice()>LevelProfit*po) {
ModifyOrder(-1, OrderOpenPrice()+LevelWLoss*po, -1);
}
}
}
if (OrderType()==OP_SELL) {
if (OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()<LevelWLoss*po) {
pp=MarketInfo(OrderSymbol(), MODE_ASK);
if (OrderOpenPrice()-pp>LevelProfit*po) {
ModifyOrder(-1, OrderOpenPrice()-LevelWLoss*po, -1);
}
}
}
}
}
}
то есть если цена уходит в убыток от открытого ордера на количество пунктов LevelProfit (можно назвать LevelLoss), нужно переностить тейкпрофит в ноль или в убыток на 1 пункт 2 и т.д., смотря что поставить в параметре LevelWLoss, чтобы если цена и развернется, профита бы уже не было. Или может у кого готовая есть?
Доброго дня! Вы знаете, только что вырезал код из раздела инит советника, ( я так отлаживал на выходные - тиков то нет!), перенёс в старт. Убрал наружный цикл фор. Компилировал.
Заругалось-- 'continue' - 'break' or 'continue' used within some cycle only C:\Альпари\experts\Выходные.mq4 (69, 20)
О чём это оно? Ну в цикле континуэ, в цикле, и что? Я вот английский не очень.. Если некие слова и пойму, то до кучи смысла не сложу!
Доброго дня! Вы знаете, только что вырезал код из раздела инит советника, ( я так отлаживал на выходные - тиков то нет!), перенёс в старт. Убрал наружный цикл фор. Компилировал.
Заругалось-- 'continue' - 'break' or 'continue' used within some cycle only C:\Альпари\experts\Выходные.mq4 (69, 20)
О чём это оно? Ну в цикле континуэ, в цикле, и что? Я вот английский не очень.. Если некие слова и пойму, то до кучи смысла не сложу!
у тебя цикла нет, а оператор continue стоит(он используется только в циклах).
Помогите пожалуйста, сделать вот эту функцию наоборот:
то есть если цена уходит в убыток от открытого ордера на количество пунктов LevelProfit (можно назвать LevelLoss), нужно переностить тейкпрофит в ноль или в убыток на 1 пункт 2 и т.д., смотря что поставить в параметре LevelWLoss, чтобы если цена и развернется, профита бы уже не было. Или может у кого готовая есть?
Заранее благодарю))
Функция может быть такой:
void fMoving_TPInBU (int fi_LevelLOSS, // уровень Лосса в пп. (для цены) - ТОЛЬКО > 0int fi_LevelBU, // уровень БУ в пп. (для тэйкпрофита) - может быть и >= 0 и < 0string fs_Symbol = "", // Symbolint fi_Type = -1, // Typeint gi_MG = -1) // MagicNumber
{
double ld_Point, ld_Price;
int li_Type, li_cnt, li_total = OrdersTotal();
//----if (li_total == 0) return;
if (fs_Symbol == "" || fs_Symbol == "0") fs_Symbol = Symbol();
for (int li_pos = li_total - 1; li_pos >= 0; li_pos--)
{
if (!OrderSelect (li_pos, SELECT_BY_POS, MODE_TRADES)) continue;
if (OrderSymbol() != fs_Symbol) continue;
if (gi_MG > -1) if (gi_MG != OrderMagicNumber()) continue;
li_Type = OrderType();
if (li_Type > 1) continue;
if (li_Type > -1) if (li_Type != fi_Type) continue;
RefreshRates();
if (li_Type == 0) {li_cnt = 1; ld_Price = MarketInfo (fs_Symbol, MODE_BID);}
else {li_cnt = -1; ld_Price = MarketInfo (fs_Symbol, MODE_ASK);}
ld_Point = MarketInfo (OrderSymbol(), MODE_POINT);
if (li_cnt * (OrderOpenPrice() - ld_Price) >= fi_LevelLOSS * ld_Point)
{
double ld_TP = NormalizeDouble (OrderOpenPrice() + li_cnt * fi_LevelBU * ld_Point, MarketInfo (fs_Symbol, MODE_DIGITS));
//---- Проверка на "излишнюю" модификациюif (ld_TP - OrderTakeProfit() != 0.0)
{OrderModify (OrderTicket(), ld_Price, OrderStopLoss(), ld_TP, 0);}
}
}
//----
}
Не нужно забывать при модификации СТОПов проверять на ограничения MODE_STOPLEVEL и MODE_FREEZELEVEL.
Как нет? А if (BUY == 0)- разве это не цикл? Страно, я убрал только самый наружный цикл, который было обьял скобками всю программу что в старте. Он было нужен был для отладки , и я его убрал.
Вот, а если не туда, то пусть if (strela1 < strela2) передаёт, логиа работы программы не нарушится.
Как нет? А if (BUY == 0)- разве это не цикл? Страно, я убрал только самый наружный цикл, который было обьял скобками всю программу что в старте.
Нет. Не цикл. Ты убрал, как раз то, что нужно было оставить. Читай весь учебник! Особенно здесь: " Пример использования составного оператора в условном операторе. Сначала идет условный оператор if(выражение), за ним следует составной оператор. Составной оператор содержит список исполняемых операторов."
HELP!Прошу помощи !!В качестве примера прилагаю данный рисунок.Я не программист данный индикатор кое-как спаял но дальше все уткнулся в нехватку знаний и умений пытался целую неделю вывести стрелки на экран -ничего не получилось.Объясню суть.На выделенных местах-подчеркнуто белым,наблюдается явная дивергенция (как я ее понимаю) то есть расхождения показателей гистограммы и линии с ценой.На рисунке для примера я отметил эти места цифрами 1-2-3-4.В этих местах значения линии индикатора уменьшаются по модулю, хотя цена продолжает обновлять низы и таким образом мы добрались до точки 5 в ней мы видим основу цена обновила лоу и низ по закрытию , гистограмма тоже растет, но линия показывает уменьшение .Вот эта точка нам и нужна.Если кого-то заинтересовало среди программеров-помогите.Хотя бы для начала стрелки начертить.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Помогите пожалуйста, сделать вот эту функцию наоборот:
то есть если цена уходит в убыток от открытого ордера на количество пунктов LevelProfit (можно назвать LevelLoss), нужно переностить тейкпрофит в ноль или в убыток на 1 пункт 2 и т.д., смотря что поставить в параметре LevelWLoss, чтобы если цена и развернется, профита бы уже не было. Или может у кого готовая есть?
Заранее благодарю))
Доброго дня! Вы знаете, только что вырезал код из раздела инит советника, ( я так отлаживал на выходные - тиков то нет!), перенёс в старт. Убрал наружный цикл фор. Компилировал.
Заругалось-- 'continue' - 'break' or 'continue' used within some cycle only C:\Альпари\experts\Выходные.mq4 (69, 20)
О чём это оно? Ну в цикле континуэ, в цикле, и что? Я вот английский не очень.. Если некие слова и пойму, то до кучи смысла не сложу!
Доброго дня! Вы знаете, только что вырезал код из раздела инит советника, ( я так отлаживал на выходные - тиков то нет!), перенёс в старт. Убрал наружный цикл фор. Компилировал.
Заругалось-- 'continue' - 'break' or 'continue' used within some cycle only C:\Альпари\experts\Выходные.mq4 (69, 20)
О чём это оно? Ну в цикле континуэ, в цикле, и что? Я вот английский не очень.. Если некие слова и пойму, то до кучи смысла не сложу!
Помогите пожалуйста, сделать вот эту функцию наоборот:
то есть если цена уходит в убыток от открытого ордера на количество пунктов LevelProfit (можно назвать LevelLoss), нужно переностить тейкпрофит в ноль или в убыток на 1 пункт 2 и т.д., смотря что поставить в параметре LevelWLoss, чтобы если цена и развернется, профита бы уже не было. Или может у кого готовая есть?
Заранее благодарю))
Функция может быть такой:
Не нужно забывать при модификации СТОПов проверять на ограничения MODE_STOPLEVEL и MODE_FREEZELEVEL.
Спасибо!! Щас гляну..
Как нет? А if (BUY == 0)- разве это не цикл? Страно, я убрал только самый наружный цикл, который было обьял скобками всю программу что в старте. Он было нужен был для отладки , и я его убрал.
Вот, а если не туда, то пусть if (strela1 < strela2) передаёт, логиа работы программы не нарушится.
Спасибо!! Щас гляну..
Как нет? А if (BUY == 0)- разве это не цикл? Страно, я убрал только самый наружный цикл, который было обьял скобками всю программу что в старте.
Нет. Не цикл. Ты убрал, как раз то, что нужно было оставить. Читай весь учебник! Особенно здесь: " Пример использования составного оператора в условном операторе. Сначала идет условный оператор if(выражение), за ним следует составной оператор. Составной оператор содержит список исполняемых операторов."
TarasBY, спасибо за пояснения и функцию!
Функцию за бираю к себе в коллекцию, но кое-что непонятно:
Параметр fi_LevelBU если с минусом - это сдвиг тейка в убыток, а если с плюсом в прибыль или наоборот?
И второй: проверку на ограничения лучше в самой функции проводить или сделать это вне функции?
TarasBY, спасибо за пояснения и функцию!
Функцию за бираю к себе в коллекцию, но кое-что непонятно:
Параметр fi_LevelBU если с минусом - это сдвиг тейка в убыток, а если с плюсом в прибыль или наоборот?
Правильно (не наоборот).
И второй: проверку на ограничения лучше в самой функции проводить или сделать это вне функции?
Это каждый решает для себя сам. Я сделал себе библиотеку, которая отвечает за исполнение торговых приказов и контролирует проверку на все ограничения.
P.S. В коде функции была небольшая ошибка (лишняя скобка) - подправил.