Logo

Вход

Войти с помощью соц. сетей
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения
  • #1 Свернуть

    Mql 5: Несколько вопросов от начинающего

    И еще вопросы появились по МТ5. Не модифицируется ТР. Код:

    PHP код:
    void ModifyPositionFlex43()
    {

    for (
    int i=PositionsTotal()-1;i>=0;i--)
    {
    if (
    PositionSelect(Symbol()))
    // order with appropriate ORDER_MAGIC and order type
    if (PositionGetInteger(POSITION_MAGIC) == 2)
    {
    double sl;
    double tp;
    //--- prepare a request
    tp NormalizeDouble(GetIndicator(handle1,0,0), NDigits);
    sl NormalizeDouble(stoploss_sNDigits);
    Print(
    "tp == " DoubleToString(tpNDigits));
    CTrade trade;
    trade.SetDeviationInPoints(4);
    Print(
    "Try to mod sell");
    trade.PositionModify(Symbol(), sltp);
    // check the result
    IsError(trade__FUNCTION__);

    }
    }


    В журнале пишет:



    Типа выполнено. Но в итоге ТР остается на первоначаоьном месте. Если б хоть ошибками плевался этот теремок... Картина:


    Вложения
  • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
  • #2 Свернуть

    Сообщение от Ясон
    Типа выполнено. Но в итоге ТР остается на первоначаоьном месте. Если б хоть ошибками плевался этот теремок...
    1. Опять доку не читаем... Понятно, что не царское это дело... А там для холопов русским по белому:
    Успешное окончание работы метода PositionModify(...) не всегда означает успешное совершение торговой операции. Необходимо проверять результат выполнения торгового запроса (код возврата торгового сервера) вызовом метода ResultRetcode().
    2. С вопросами по генератору тебе лучше писать вот в эту ветку.
     

    Комментарий

    • #3 Свернуть

      Сообщение от Ясон
      2. Как сделать, чтобы через Rectangle на чарте не были видны другие графические элементы, в частности, свечи графика?
      Смотрим в сторону OBJPROP_BACK.
         

      Комментарий

      • #4 Свернуть

        Сообщение от ir0407
        Смотрим в сторону OBJPROP_BACK.
        В справке написано:
        OBJPROP_BACK
        Объект на заднем плане
        Все. Понятно, что не царское это дело объяснять холопам об чем пукнули... Думайте сами, что за объект на заднем плане и что с ним делать.

        Сообщение от ir0407
        С вопросами по генератору тебе лучше писать вот в эту ветку.
        По генератору у мну вопросов нет, там все четко и подробно люди расписали много лет назад. А вот по коду МТ5 и по "Справке" - очччччень много вопросов! Не зря этот теремок и не пошел в массы.

        Сообщение от ir0407
        Опять доку не читаем... Понятно, что не царское это дело... А там для холопов русским по белому:
        ​​​​​​​Так то, что модификация не произошла - я вижу. Вопрос в том, почему не произошла.
         

        Комментарий

        • #5 Свернуть

          Сообщение от Ясон
          В справке написано: OBJPROP_BACK Объект на заднем плане Все. Понятно, что не царское это дело объяснять холопам об чем пукнули... Думайте сами, что за объект на заднем плане и что с ним делать.
          А че там думать? Делаем проверочный скрипт и проверяем, как работает и что делает та или иная функция, с тем или иным параметром.
          А "объект" - это любой графический объект подсистемы терминала описанный в этой таблице.

          Сообщение от Ясон
          По генератору у мну вопросов нет, там все четко и подробно люди расписали много лет назад. А вот по коду МТ5 и по "Справке" - очччччень много вопросов!
          Ну да, ну да... А код тебе что генерит? Уж не генератор ли? Али ты самолично его ручками набиваш? Судя по выложенному тобой коду, даже самый полный нуб в программировании не способен так испоганить код, как твой генератор.

          Сообщение от Ясон
          Так то, что модификация не произошла - я вижу. Вопрос в том, почему не произошла.
          В МТ5 работа с ордерами кардинально отличается от МТ4. Там совершенно не достаточно просто плюнуть в сервер запросом и думать, что на этом вся котовасия с ним уже и закончилась. Что происходит в твоем случае. В функции PositionModify() делается только попытка отправить ордер на сервер, но ничего более. Терминал просто размещает запрос на сервере, но еще до выполнения этого запроса сервером выходит из функции PositionModify(), где следом за ней у тебя сразу идет проверка IsError(). Вот только в это время проверять-то еще и нечего, т.к. сервер еще не обработал ордер и не вернул результат этой обработки. Как следствие ты и видишь в этом месте вполне логичное сообщение "> Executed: тра-ли-ва-ли...", что означает: "Все хорошо прекрасная маркиза, мы свою работу сделали, запрос сформировали и отфутболили его на сервер. Че там дале будет - нас ужо не волнует. С серваком (с ответом от сервера) типа теперь разбирайтесь сами, а мы умываем руки ибо наша компетенция на этом закончена". Как говорил незабвенный Аркадий Райкин - "Узкая списализация" в МТ5 у торговых функций. А вот, чтоб поиметь реальный ответ сервера с реальной ошибкой, нужно юзать такие функции, как OnTrade() и/или OnTradeTransaction(). Вобщем нужно внимательно курить описание OrderSend(), и походить там по всем ссылкам и поштудировать примеры для возникновения понимания о принципах работы торговых функций в МТ5. Ну и, в связи с тем что ты юзаешь либу Trade.mqh, придется тебе проштудировать еще и ее описание. Вобщем на ближайшее время не скучно тебе там будет.
          Как-то так...
             

          Комментарий

          • #6 Свернуть

            Сообщение от ir0407 Посмотреть сообщение
            Судя по выложенному тобой коду, даже самый полный нуб в программировании не способен так испоганить код, как твой генератор.
            Так что, там вот такие люди писали код??? Чет сомневаюсь, что такие люди ( на таком уровне ) могли написать такую программу

            А помнишь:

            PHP код:
            //================================================== ================================================== =====================================//
            // ir0407 . Функция открытия ордеров //
            //================================================== ================================================== =====================================//
            //SendOrder (OP_BUY , LotR, 0, 0, MNBuy, comment, MNBuy );
            int SendOrder (int Typedouble Lotsint TP_SOint SLint Magic_SOstring Cmntint Error_OO){ 
            До сих пор юзаю во всех своих совах! Да, думаю, и не только я один. Правда, не знаю, каковы судьбы всех тех, кто юзал "Бульдозер" и учился на нем "ездить"

            А ты так и не показал нам после Буля ничего... Есть, небось, что показать, да деньги любят тишину?
               

            Комментарий

            • #7 Свернуть

              Сообщение от Ясон Посмотреть сообщение
              Так что, там вот такие люди писали код??? Чет сомневаюсь, что такие люди ( на таком уровне ) могли написать такую программу
              Люди ему всего лишь "кирпичики" прописали, а все остальное он сам уже из "кирпичиков" ваяет, на основе того, что ему там юзер в блоках нагородил. Но получается это у него так себе.

              Сообщение от Ясон Посмотреть сообщение
              А ты так и не показал нам после Буля ничего... Есть, небось, что показать, да деньги любят тишину?
              Нету. Я сугубо в ручной дзэн ушел. И смысла больше и нервы крепче.
                 

              Комментарий

              • #8 Свернуть

                Сообщение от ir0407 Посмотреть сообщение
                Нету. Я сугубо в ручной дзэн ушел. И смысла больше и нервы крепче.
                В смысле лапками торгуешь? Дак а разве этот ручной дзен неможливо закодить? Или ручной дзен - это что-то другое? Не трейдинг?

                Тэк... Тейк-профит я победил, правда пошел обходным путем ( а че: если гора не идет ко мне - я гору обойду ) - написакал функцию закрытия позиции ( у мну все-равно тейк-профит по индикатору равняется ) и уже даже начал тестировать А, я ж забыл сказать, что нашел некоторые граальные закономерности на графиках поэтому и нужен МТ5 - проверить в условиях, приближенных к реальным!

                Теперь у меня проблема создать модуль мани-менеджмента...
                   
                Последний раз редактировалось Ясон; 16.11.2021, 19:27.

                Комментарий


                • MonyaMaker
                  MonyaMaker комментирует:
                  Редактировать комментарий
                  [Тейк-профит я победил, правда пошел обходным путем.....] Не, не переживай, все путем. По классике, нормальные герои, всегда идут в обход. )))
              • #9 Свернуть

                Сообщение от Ясон Посмотреть сообщение
                Так что, там вот такие люди писали код??? Чет сомневаюсь, что такие люди ( на таком уровне ) могли написать такую программу
                Согласен с ir0407 полностью, код создаётся этим генератором какой-то "кривоватый".

                Код функции, что вы приводили ModifyPositionFlex43() вы сами писали или вам его наваял этот "чудо" генератор?

                Просто не могу понять чего вы ждали или ждёте от этих строк т.е. что они должны делать, какую позицию выбирать?
                PHP код:
                for (int i=PositionsTotal()-1;i>=0;i--)
                {
                if (
                PositionSelect(Symbol())) 
                Если вы выбираете позицию с помощью PositionSelect(_Symbol), то ей тот цикл for что в предыдущей строке до одного места.

                В случае неттинговых счетов она вам вернёт текущую позицию по символу если она есть, но при этом не стоит забывать что на неттинговых счетах по любому символу на текущий момент может быть открыта всего одна позиция.
                А в случае хеджинговых счетов она вам будет всегда выбирать/возвращать ту позицию по символу у которой наименьший тикет.

                Т.е. вот тот цикл с перебором позиций лишний если выбор происходит с помощью PositionSelect() и не стоит забывать что в случае нескольких открытых позиций по символу, выбираться постоянно будет та позиция у которой наименьший тикет.

                И так же само будет происходить выбор позиции для модификации с помощью trade.PositionModify(Symbol(), sl, tp) т.е. этой функцией с выбором по Symbol() не по тикету, будет постоянно модифицироваться только та позиция у которой наименьший тикет. Если у вас несколько позиций по символу тогда не факт что будет происходить модификация именно той позиции которая вам нужна.

                Как-то так.
                 
                Последний раз редактировалось docikstorm; 16.11.2021, 19:30.
                Индикатор v1.04 - который рассчитывает и показывает текущую выполненную проторговку на инстафьючерсах EURUSDweek & EURUSDmonth, также рассчитывает и отображает наличие запаса проторговки.

                Комментарий

                • #10 Свернуть

                  Сообщение от docikstorm Посмотреть сообщение
                  И так же само будет происходить выбор позиции для модификации с помощью trade.PositionModify(Symbol(), sl, tp) т.е. этой функцией с выбором по Symbol() не по тикету, будет постоянно модифицироваться только та позиция у которой наименьший тикет. Если у вас несколько позиций по символу тогда не факт что будет происходить модификация именно той позиции которая вам нужна.
                  Ну вот! " Я ему давеча говорю: Доцент, а Доцент, у меня насморк... А он: пасть порву, моргала выколю!"

                  -
                  -


                  Я говорю: "Мне только понять причину..." А он: "Иди ты... в библиотеку! Или в "Справку" МТ5..."

                  Экий вы замечательный человек: все замечаете! Видимо, действительно код генератора писался еще во времена, когда МТ5 был неттинговый... Да, это он сгенерировал.

                  Но, к сожалению, это не решает проблему: дело в том, что в работе только одна позиция все время у меня.

                  В инете поискал - такого везде наворочено... Решил легче обойти стороной эту горбушку, пока.
                     

                  Комментарий


                  • MonyaMaker
                    MonyaMaker комментирует:
                    Редактировать комментарий
                    Джедай, он как Доцент, таа-а-а-а-кой. ))) Сказал в библиотеку, значит в библиотеку. ))))
                    Последний раз редактировалось MonyaMaker; 17.11.2021, 19:27.
                • #11 Свернуть

                  Сообщение от Ясон Посмотреть сообщение
                  Экий вы замечательный человек: все замечаете! Видимо, действительно код генератора писался еще во времена, когда МТ5 был неттинговый... Да, это он сгенерировал.
                  Но, к сожалению, это не решает проблему: дело в том, что в работе только одна позиция все время у меня.
                  Я не к тому что код именно для неттинга, а к тому если такой выбор ордера по наименьшему тикету вам подходит тогда тот цикл for можете вообще убрать, зачем ненужное зацикливание тем более в этом случае зацикливается торговая функция.

                  Как вариант попробуйте позицию модифицировать с выбором не через Symbol() а через её тикет.
                  Ну и ещё один момент так как невидно на каком инструменте сова работает, а точно новый тп стоплевел не перепрыгнул?
                  Ведь у некоторых брокеров у которых пишется что стоплевел по инструменту 0 он всё равно может приравниваться к одному или двум текущим спредам т.е. по факту он не нулевой получается.
                   
                  Индикатор v1.04 - который рассчитывает и показывает текущую выполненную проторговку на инстафьючерсах EURUSDweek & EURUSDmonth, также рассчитывает и отображает наличие запаса проторговки.

                  Комментарий


                  • Ясон
                    Ясон комментирует:
                    Редактировать комментарий
                    "... а точно новый тп стоплевел не перепрыгнул?" вот это могабыть-могабыть... Надо еще присмотреться.
                • #12 Свернуть

                  Сообщение от Ясон Посмотреть сообщение
                  В смысле лапками торгуешь?
                  Лапками и только лапками.
                  Сообщение от Ясон Посмотреть сообщение
                  Дак а разве этот ручной дзен неможливо закодить?
                  Было бы можливо уже б закодил... Психология, особливо если она не твоя, и особливо если это психология толпы - не кодится аж никак.
                  Сообщение от Ясон Посмотреть сообщение
                  Или ручной дзен - это что-то другое? Не трейдинг?
                  Трейдинг, но на основании только своих мозгов, а не индюков или чего прочего.
                   

                  Комментарий

                  • #13 Свернуть

                    Дорогие знатоки и просто юзеры и трейдеры!

                    Есть вот такой код:

                    PHP код:
                    double GetTickValue() {
                    double TickValue SymbolInfoDouble(_SymbolSYMBOL_TRADE_TICK_VALUE);
                    if ( 
                    SYMBOL_CALC_MODE_FOREX ) { 
                    string symb2 SymbolInfoString(_Symbol,SYMBOL_CURRENCY_BASE);
                    double mult2 1;
                    if (
                    symb2 == "EUR"mult2 SymbolInfoDouble("EURUSD",SYMBOL_BID);
                    if (
                    symb2 == "GBP"mult2 SymbolInfoDouble("GBPUSD",SYMBOL_BID);
                    if (
                    symb2 == "JPY"mult2 1/SymbolInfoDouble("USDJPY",SYMBOL_BID);
                    if (
                    symb2 == "CHF"mult2 1/SymbolInfoDouble("USDCHF",SYMBOL_BID);
                    if (
                    symb2 == "AUD"mult2 SymbolInfoDouble("AUDUSD",SYMBOL_BID);
                    if (
                    symb2 == "ZAR"mult2 1/SymbolInfoDouble("USDZAR",SYMBOL_BID);
                    if (
                    symb2 == "HKD"mult2 1/SymbolInfoDouble("USDHKD",SYMBOL_BID);
                    if (
                    mult2 != 0TickValue *= mult2;
                    string account_currency AccountInfoString(ACCOUNT_CURRENCY);
                    if (
                    account_currency != "USD") {
                    string newsymb ""int m 1;
                    if (
                    account_currency == "AUD"newsymb "AUDUSD";
                    if (
                    account_currency == "EUR"newsymb "EURUSD";
                    if (
                    account_currency == "GBP"newsymb "GBPUSD";
                    if (
                    account_currency == "RUB") { newsymb "USDRUB"= -1; }
                    double TV2 SymbolInfoDouble(newsymbSYMBOL_TRADE_TICK_VALUE);
                    TickValue *= pow(TV2,m);
                    }
                    }
                    return(
                    TickValue);

                    Подкорректируйте, если чего не так сделал. Сами то мы не местные и в вашей стране МТ-пятии не очень ориентируемся...
                     

                    Комментарий

                    • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
                    • #14 Свернуть

                      Сообщение от Ясон Посмотреть сообщение
                      Дорогие знатоки и просто юзеры и трейдеры!

                      Есть вот такой код:

                      PHP код:
                      double GetTickValue() {
                      double TickValue SymbolInfoDouble(_SymbolSYMBOL_TRADE_TICK_VALUE);
                      if ( 
                      SYMBOL_CALC_MODE_FOREX ) {
                      string symb2 SymbolInfoString(_Symbol,SYMBOL_CURRENCY_BASE);
                      double mult2 1;
                      if (
                      symb2 == "EUR"mult2 SymbolInfoDouble("EURUSD",SYMBOL_BID);
                      if (
                      symb2 == "GBP"mult2 SymbolInfoDouble("GBPUSD",SYMBOL_BID);
                      if (
                      symb2 == "JPY"mult2 1/SymbolInfoDouble("USDJPY",SYMBOL_BID);
                      if (
                      symb2 == "CHF"mult2 1/SymbolInfoDouble("USDCHF",SYMBOL_BID);
                      if (
                      symb2 == "AUD"mult2 SymbolInfoDouble("AUDUSD",SYMBOL_BID);
                      if (
                      symb2 == "ZAR"mult2 1/SymbolInfoDouble("USDZAR",SYMBOL_BID);
                      if (
                      symb2 == "HKD"mult2 1/SymbolInfoDouble("USDHKD",SYMBOL_BID);
                      if (
                      mult2 != 0TickValue *= mult2;
                      string account_currency AccountInfoString(ACCOUNT_CURRENCY);
                      if (
                      account_currency != "USD") {
                      string newsymb ""int m 1;
                      if (
                      account_currency == "AUD"newsymb "AUDUSD";
                      if (
                      account_currency == "EUR"newsymb "EURUSD";
                      if (
                      account_currency == "GBP"newsymb "GBPUSD";
                      if (
                      account_currency == "RUB") { newsymb "USDRUB"= -1; }
                      double TV2 SymbolInfoDouble(newsymbSYMBOL_TRADE_TICK_VALUE);
                      TickValue *= pow(TV2,m);
                      }
                      }
                      return(
                      TickValue);

                      Подкорректируйте, если чего не так сделал. Сами то мы не местные и в вашей стране МТ-пятии не очень ориентируемся...
                      А в чем смысл?

                      Комментарий

                      Сейчас онлайн

                      working...
                      X