Форум трейдеров » Торговые роботы, советники, индикаторы » Вопросы программирования
+ Подписаться
Страница 58 из 87 ПерваяПервая ... 848565758596068 ... ПоследняяПоследняя
  1. 107
    Комментарии
    0
    Темы
    107
    Репутация Pro
    Аватар для religare777  
    В начале пути

    2 Медалей
    Добрый день!
    Подскажите, что не так в коде:

    // Проверяем все первые ордера-----------------------------------------------------------------------------
    for(i=0;i<N;i++) Y[i]=false;
    for(OpenOrder=true,t=0,PBS=-1,i=OrdersTotal()-1;i>=0;i--)
    {
    if(!OrderSelect(i,SELECT_BY_POS)) continue;
    if(OrderSymbol()!=Symbol()) continue;
    if(OrderMagicNumber()==0) //если if(OrderMagicNumber()==0 || OrderMagicNumber()!=0) - будет только buy
    {
    if((OrderType()==OP_BUY && (MathAbs(OrderOpenPrice()-MarketInfo(Symbol(), MODE_ASK))<=MinPips*Point || LotsCount1>MaxBlocks)) //MarketInfo(Symbol(), MODE_ASK)
    || (OrderType()==OP_SELL && (MathAbs(OrderOpenPrice()-MarketInfo(Symbol(), MODE_BID))<=MinPips*Point || LotsCount1>MaxBlocks))) OpenOrder=false; //MarketInfo(Symbol(), MODE_BID)
    n=OrderOpenTime();
    if(t<n) { t=n; PBS=OrderType(); }
    } else n=OrderMagicNumber();
    for(y=false,j=0;j<N && !y;j++) if(MAGIC[j]==n) { Y[j]=true; y=true; }
    if(!y) { MAGIC[N]=n; NO[N]=false; Y[N]=true; N++; }
    if((N>MaxBlocks && MaxBlocks>0) || N>=1000) break;
    }
    for(i=0;i<N;i++) if(!Y[i])
    {
    for(j=i;j<N-1;j++) { MAGIC[j]=MAGIC[j+1]; NO[j]=NO[j+1]; Y[j]=Y[j+1]; }
    N--; i--;
    }
    if(N==0) StartMargin=AccountFreeMargin();

    Советник должен открывать не больше MaxBlocks блоков ордеров
    блоки - это 0.01 - 0.02 - 0.04 ... и т.д. (встречные ордера). Причем блоки открываются попеременно 0.01 buy и 0.01 sell и т.д.
    Советник в какой-то момент переклинивает и он начинает штамповать buy, buy, buy... При каких условиях это происходит - я так и не понял. Иногда достаточно открыть вручную один лишний блок или поставить в настройках меньше блоков, чем уже открыто - начинается штамповка. Если что я могу весь код советника кинуть.
    С уважением,
    Александр
  2. 2,974
    Комментарии
    7
    Темы
    2995
    Репутация Pro
     
    Banned

    4 Медалей
    Цитата Сообщение от religare777 Посмотреть сообщение
    Добрый день!
    Подскажите, что не так в коде:

    // Проверяем все первые ордера-----------------------------------------------------------------------------
    for(i=0;i<N;i++) Y[i]=false;
    for(OpenOrder=true,t=0,PBS=-1,i=OrdersTotal()-1;i>=0;i--)
    {
    if(!OrderSelect(i,SELECT_BY_POS)) continue;
    if(OrderSymbol()!=Symbol()) continue;
    if(OrderMagicNumber()==0) //если if(OrderMagicNumber()==0 || OrderMagicNumber()!=0) - будет только buy
    {
    if((OrderType()==OP_BUY && (MathAbs(OrderOpenPrice()-MarketInfo(Symbol(), MODE_ASK))<=MinPips*Point || LotsCount1>MaxBlocks)) //MarketInfo(Symbol(), MODE_ASK)
    || (OrderType()==OP_SELL && (MathAbs(OrderOpenPrice()-MarketInfo(Symbol(), MODE_BID))<=MinPips*Point || LotsCount1>MaxBlocks))) OpenOrder=false; //MarketInfo(Symbol(), MODE_BID)
    n=OrderOpenTime();
    if(t<n) { t=n; PBS=OrderType(); }
    } else n=OrderMagicNumber();
    for(y=false,j=0;j<N && !y;j++) if(MAGIC[j]==n) { Y[j]=true; y=true; }
    if(!y) { MAGIC[N]=n; NO[N]=false; Y[N]=true; N++; }
    if((N>MaxBlocks && MaxBlocks>0) || N>=1000) break;
    }
    for(i=0;i<N;i++) if(!Y[i])
    {
    for(j=i;j<N-1;j++) { MAGIC[j]=MAGIC[j+1]; NO[j]=NO[j+1]; Y[j]=Y[j+1]; }
    N--; i--;
    }
    if(N==0) StartMargin=AccountFreeMargin();

    Советник должен открывать не больше MaxBlocks блоков ордеров
    блоки - это 0.01 - 0.02 - 0.04 ... и т.д. (встречные ордера). Причем блоки открываются попеременно 0.01 buy и 0.01 sell и т.д.
    Советник в какой-то момент переклинивает и он начинает штамповать buy, buy, buy... При каких условиях это происходит - я так и не понял. Иногда достаточно открыть вручную один лишний блок или поставить в настройках меньше блоков, чем уже открыто - начинается штамповка. Если что я могу весь код советника кинуть.
    С уважением,
    Александр
    Без обиды, плз..
    Прежде, чем такое выкладывать - надо ЭТО прочитать вслух, с чувством, толком, да расстановкой - глядишь, и ошибки сами-собой найдутся..;)
  3. 107
    Комментарии
    0
    Темы
    107
    Репутация Pro
    Аватар для religare777  
    В начале пути

    2 Медалей
    Цитата Сообщение от EQU Посмотреть сообщение
    Без обиды, плз..
    Прежде, чем такое выкладывать - надо ЭТО прочитать вслух, с чувством, толком, да расстановкой - глядишь, и ошибки сами-собой найдутся..;)
    Вроде сам разобрался N после переинициализации рассчитывается неверно. Заменил на более стабильный параметр. Если не пройдет проверку, точно придется описывать подробно.
  4. 3,168
    Комментарии
    1
    Темы
    3184
    Репутация Pro
    Аватар для SergP  
    Мастер форумных наук

    4 Медалей
    Цитата Сообщение от EQU Посмотреть сообщение
    Без обиды, плз..
    Прежде, чем такое выкладывать - надо ЭТО прочитать вслух, с чувством, толком, да расстановкой - глядишь, и ошибки сами-собой найдутся..;)
    это вы загнули..... у программера, как и у писателя... половина остаётся в голове....:smartass:

    а вообще то конечно - код надо бы более удобочитабельный выкладывать:smartass:

    мне лично... стало просто страшно- скока нужно будет времени убить- пока я врублюсь с сие:smartass:
  5. 1,401
    Комментарии
    13
    Темы
    1408
    Репутация Pro
    Аватар для Karakurt  
    Мастер форумных наук

    5 Медалей
    Цитата Сообщение от SergP Посмотреть сообщение
    ...а вообще то конечно - код надо бы более удобочитабельный выкладывать...
    Это средствами форумного редактора невозможно - он все лишние пробелы убирает, в том числе отступы. Так что зря на человека наехали.

    religare777, а вот комментарии писать было бы кстати - прежде всего для себя. А то отложите текст на полгода, а потом сами не разберетесь. Ну и людям понятнее, где у Вас что и, главное, зачем ;), если уж Вы помощи просите.
  6. 3,168
    Комментарии
    1
    Темы
    3184
    Репутация Pro
    Аватар для SergP  
    Мастер форумных наук

    4 Медалей
    Цитата Сообщение от Karakurt Посмотреть сообщение
    Это средствами форумного редактора невозможно - он все лишние пробелы убирает, в том числе отступы. Так что зря на человека наехали.

    religare777, а вот комментарии писать было бы кстати - прежде всего для себя. А то отложите текст на полгода, а потом сами не разберетесь. Ну и людям понятнее, где у Вас что и, главное, зачем ;), если уж Вы помощи просите.
    Код:
    if( вы не умеете пользоваться этим форумом)
                                    {
                                          это не значит , что это не возможно;
                                     }
                                   else
                                       {
                                         научитесь;
                                         }
    как то таг:smartass:

    при ответе нажмите значок "#"..... и во внутрь тэгов [CODE] скопируйте текст
  7. 1,401
    Комментарии
    13
    Темы
    1408
    Репутация Pro
    Аватар для Karakurt  
    Мастер форумных наук

    5 Медалей
    SergP, спасибо, не знал. Да как-то не особо и надо было. А учиться мы завсегда... :bow:
  8. 107
    Комментарии
    0
    Темы
    107
    Репутация Pro
    Аватар для religare777  
    В начале пути

    2 Медалей
    Цитата Сообщение от SergP Посмотреть сообщение
    Код:
    if( вы не умеете пользоваться этим форумом)
                                    {
                                          это не значит , что это не возможно;
                                     }
                                   else
                                       {
                                         научитесь;
                                         }
    5 баллов!!! :thumbsup_002:
    А если серьезно, я сам еле разобрался. Этот код мне делал программист, который не учел одного момента. Поскольку уже на форуме выкладывали частичное решение проблемы, с которой я столкнулся, я его повторю (правда он немного переработан под мои задачи):
    void UdaleniePervuh(int magicnum)
    {
    int ors[];
    int i;
    for (i=0; i<OrdersTotal(); i++)
    {
    OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
    if (OrderMagicNumber() == magicnum && OrderLots()==STlot)
    {
    ArrayResize(ors, ArrayRange(ors, 0) + 1);
    ors[ArrayRange(ors, 0) - 1] = OrderTicket();
    }
    }

    for (i = 0; i < ArrayRange(ors, 0); i++)
    {
    OrderSelect(ors[i], SELECT_BY_TICKET, MODE_TRADES);
    switch (OrderType())
    {
    case OP_BUY : OrderClose(ors[i], OrderLots(), MarketInfo(Symbol(), MODE_BID), 0); break;
    case OP_SELL : OrderClose(ors[i], OrderLots(), MarketInfo(Symbol(), MODE_ASK), 0); break;
    default : OrderDelete(ors[i]);
    }
    }

    ArrayResize(ors, 0);
    }

    Вкратце - это удаление всех ордеров, которые имеют размер лота STlot.
    В чем суть вопроса: необходимо доработать этот код, чтобы происходило удаление одного ордера (а не всех) при условии, что
    1) этот ордер закроется с профитом или
    2) если таковых ордеров нет, то самый последний открытый ордер (размером лота STlot).
    Если кто-нибудь возьмется, готов даже оплатить затраты времени, если не очень дорого :bow:. Знакомый программист, который делал часть кода советника пока в отпуске, потому обращаюсь к вам, потому что знаю, что здесь есть очень опытные программисты.
    С уважением,
    Александр
  9. 107
    Комментарии
    0
    Темы
    107
    Репутация Pro
    Аватар для religare777  
    В начале пути

    2 Медалей
    Вопрос: как программно определить максимальное количество открытых и отложенных ордеров, допустимых брокером? Может открытие отложенников на большой дистанции от цены или еще каким-нибудь более цивилизованным способом?
  10. 4,164
    Комментарии
    7
    Темы
    4265
    Репутация Pro
    Аватар для Денис Давыдов  
    Мастер форумных наук

    4 Медалей
    Цитата Сообщение от religare777 Посмотреть сообщение
    Вопрос: как программно определить максимальное количество открытых и отложенных ордеров, допустимых брокером? Может открытие отложенников на большой дистанции от цены или еще каким-нибудь более цивилизованным способом?
    Ну это конечно извращение :) историю счёта совсем загадите. Для информации: в Броко на демо максимум 100 ордеров вместе с отложниками может быть открыто, на реале без ограничений.

Вверх
РегистрацияX

чтобы писать, читать, комментировать