Форум трейдеров » Торговые роботы, советники, индикаторы » Вопросы программирования
+ Подписаться
Страница 16 из 87 ПерваяПервая ... 614151617182666 ... ПоследняяПоследняя
  1. 2,974
    Комментарии
    7
    Темы
    2995
    Репутация Pro
     
    Banned

    4 Медалей
    4 BroBankir

    Для примера часть куска кода с моего июльского.. Налопатил под 4000 ордеров / месяц.. Так что 10000 к концу этапа точно не будет ))))

    double SendBuy(double Lot, string REM=""){
    if(SBuys==0){// чтоб не мусорить, если один отложенник уже открыт
    double DP=(Dist+5)*Point;// для подстраховки.. Дист - стоплевел из маркетинфо
    double DTP=(Dist+TP)*Point;//ТейкПрофит, задается где-то выше..
    double SL=0;//СтопЛосс - у меня защёлка стоит, поэтому =0.. Можно определить дотого
    if(AccountFreeMarginCheck(SMB,OP_BUY,Lot)<=0 || GetLastError()==134) return(-2);// мало денег - уходим
    if(OrderSend(SMB,OP_BUYSTOP,Lot,Ask+DP,0,SL,Ask+DT P,REM+"s",0,0,Green)>0){
    Beep(8800,2);// ордер выставлен - гудим
    return(Ask+DP);// возвращаем ОрдерОпенПрайс для послед. обработки
    }
    }
    return(-1);// чёт не открылись;)
    }

    start{
    bool ReadyForBuy=.....//пора покупать, если true
    if(ReadyForBuy)SendBuy(Lot,"Hello, World! - this is order comment.. ");
    return;
    }

    На продажу - аналогично.. ТП и СЛ в отложенниках можно выставлять сразу..
  2. 2,974
    Комментарии
    7
    Темы
    2995
    Репутация Pro
     
    Banned

    4 Медалей
    Бьюсь.. Тоска..
    пока 1 в поле.....

    Вот оно..
    Кто виноват - что делать..
    Эт надо ВСЕМММ!!!
    Почему?......
    Я не глючу - друг не глючит!!!!..

    Коды ошибок, возвращаемые торговым сервером:

    Константа Код Описание
    ERR_NO_ERROR 0 Торговая операция прошла успешно.
    ERR_NO_RESULT 1 OrderModify пытается изменить уже установленные значения такими же значениями. Необходимо изменить одно или несколько значений и повторить попытку.
    ERR_COMMON_ERROR 2 Общая ошибка. Прекратить все попытки торговых операций до выяснения обстоятельств. Возможно перезагрузить операционную систему и клиентский терминал.
    ERR_INVALID_TRADE_PARAMETERS 3 В торговую функцию переданы неправильные параметры, например, неправильный символ, неопознанная торговая операция, отрицательное допустимое отклонение цены, несуществующий номер тикета и т.п. Необходимо изменить логику программы.
    ERR_SERVER_BUSY 4 Торговый сервер занят. Можно повторить попытку через достаточно большой промежуток времени (от нескольких минут).
    ERR_OLD_VERSION 5 Старая версия клиентского терминала. Необходимо установить последнюю версию клиентского терминала.
    ERR_NO_CONNECTION 6 Нет связи с торговым сервером. Необходимо убедиться, что связь не нарушена (например, при помощи функции IsConnected) и через небольшой промежуток времени (от 5 секунд) повторить попытку.
    ERR_TOO_FREQUENT_REQUESTS 8 Слишком частые запросы. Необходимо уменьшить частоту запросов, изменить логику программы.
    ERR_ACCOUNT_DISABLED 64 Счет заблокирован. Необходимо прекратить все попытки торговых операций.
    ERR_INVALID_ACCOUNT 65 Неправильный номер счета. Необходимо прекратить все попытки торговых операций.
    ERR_TRADE_TIMEOUT 128 Истек срок ожидания совершения сделки. Прежде, чем производить повторную попытку (не менее, чем через 1 минуту), необходимо убедиться, что торговая операция действительно не прошла (новая позиция не была открыта, либо существующий ордер не был изменён или удалён, либо существующая позиция не была закрыта)
    ***ERR_INVALID_PRICE 129 Неправильная цена bid или ask, возможно, ненормализованная цена. Необходимо после задержки от 5 секунд обновить данные при помощи функции RefreshRates и повторить попытку. Если ошибка не исчезает, необходимо прекратить все попытки торговых операций и изменить логику программы. ***
    ***ERR_INVALID_STOPS 130 Слишком близкие стопы или неправильно рассчитанные или ненормализованные цены в стопах (или в цене открытия отложенного ордера). Попытку можно повторять только в том случае, если ошибка произошла из-за устаревания цены. Необходимо после задержки от 5 секунд обновить данные при помощи функции RefreshRates и повторить попытку. Если ошибка не исчезает, необходимо прекратить все попытки торговых операций и изменить логику программы. ***
    ERR_INVALID_TRADE_VOLUME 131 Неправильный объем, ошибка в грануляции объема. Необходимо прекратить все попытки торговых операций и изменить логику программы.
    ERR_MARKET_CLOSED 132 Рынок закрыт. Можно повторить попытку через достаточно большой промежуток времени (от нескольких минут).
    ERR_TRADE_DISABLED 133 Торговля запрещена. Необходимо прекратить все попытки торговых операций.
    ERR_NOT_ENOUGH_MONEY 134 Недостаточно денег для совершения операции. Повторять сделку с теми же параметрами нельзя. Попытку можно повторить после задержки от 5 секунд, уменьшив объем, но надо быть уверенным в достаточности средств для совершения операции.
    ERR_PRICE_CHANGED 135 Цена изменилась. Можно без задержки обновить данные при помощи функции RefreshRates и повторить попытку.
    ERR_OFF_QUOTES 136 Нет цен. Брокер по какой-то причине (например, в начале сессии цен нет, неподтвержденные цены, быстрый рынок) не дал цен или отказал. Необходимо после задержки от 5 секунд обновить данные при помощи функции RefreshRates и повторить попытку.
    ***ERR_REQUOTE 138 Запрошенная цена устарела, либо перепутаны bid и ask. Можно без задержки обновить данные при помощи функции RefreshRates и повторить попытку. Если ошибка не исчезает, необходимо прекратить все попытки торговых операций и изменить логику программы. ***
    ERR_ORDER_LOCKED 139 Ордер заблокирован и уже обрабатывается. Необходимо прекратить все попытки торговых операций и изменить логику программы.
    ERR_LONG_POSITIONS_ONLY_ALLOWED 140 Разрешена только покупка. Повторять операцию SELL нельзя.
    ERR_TOO_MANY_REQUESTS 141 Слишком много запросов. Необходимо уменьшить частоту запросов, изменить логику программы.
    142 Ордер поставлен в очередь. Это не ошибка, а один из кодов взаимодействия между клиентским терминалом и торговым сервером. Этот код может быть получен в редком случае, когда во время выполнения торговой операции произошёл обрыв и последующее восстановление связи. Необходимо обрабатывать так же как и ошибку 128.
    143 Ордер принят дилером к исполнению. Один из кодов взаимодействия между клиентским терминалом и торговым сервером. Может возникнуть по той же причине, что и код 142. Необходимо обрабатывать так же как и ошибку 128.
    144 Ордер аннулирован самим клиентом при ручном подтверждении сделки. Один из кодов взаимодействия между клиентским терминалом и торговым сервером.
    ERR_TRADE_MODIFY_DENIED 145 Модификация запрещена, так как ордер слишком близок к рынку и заблокирован из-за возможного скорого исполнения. Можно не ранее, чем через 15 секунд, обновить данные при помощи функции RefreshRates и повторить попытку.
    ERR_TRADE_CONTEXT_BUSY 146 Подсистема торговли занята. Повторить попытку только после того, как функция IsTradeContextBusy вернет FALSE.
    ERR_TRADE_EXPIRATION_DENIED 147 Использование даты истечения ордера запрещено брокером. Операцию можно повторить только в том случае, если обнулить параметр expiration.
    ERR_TRADE_TOO_MANY_ORDERS 148 Количество открытых и отложенных ордеров достигло предела, установленного брокером. Новые открытые позиции и отложенные ордера возможны только после закрытия или удаления существующих позиций или ордеров.
    ERR_TRADE_HEDGE_PROHIBITED 149 Попытка открыть противоположную позицию к уже существующей в случае, если хеджирование запрещено. Сначала необходимо закрыть существующую противоположную позицию, либо отказаться от всех попыток таких торговых операций, либо изменить логику программы.

    А вот эт непонятно!!
    ERR_TRADE_PROHIBITED_BY_FIFO 150 Попытка закрыть позицию по инструменту в противоречии с правилом FIFO. Сначала необходимо закрыть более ранние существующие позиции по данному инструменту, либо отказаться от всех попыток таких торговых операций, либо изменить логику программы.
    //================================================== =============================
    *** - ..........

    //я чёт сильно надеюсь,что на каждый егг у каждого есть свои затычки..
    Чтоб время зря не терять на конкурных торгах - может, отпишемся, кто-как с этим борется, и, на светл. будущее, бог даст, эт будет вместо теста за 2008.. Ну, иль просто зачтёцца..;)
  3. 64
    Комментарии
    4
    Темы
    65
    Репутация Pro
     
    В начале пути

    2 Медалей
    коллеги, помогите советом, если это вобще возможно в моем случае :D
    мне нужно, чтобы робот одновременно открывался в обе стороны (и бай и селл).
    если тупо изобразить вот так:
    if(условие открытия сделки)
    {
    BuyOp=true;
    SellOp=true;
    }
    то тогда открываемся в обе стороны, но мне нужно, чтобы параметры тейкпрофита и стоплосса были разные для бая и для селла.
    может кто-нибудь поделится мыслями / частью кода? Или по крайней мере объяснить, в каких "блоках" советника нужна правка.
    сам только начинаю ковыряться в mql, задача сложновата для меня, дальше создания переменных
    extern int TakeProfit2
    extern int StopLoss2
    не осилил :D дальше - дремучий лес
    заранее спасибо!
  4. 1,156
    Комментарии
    4
    Темы
    1189
    Репутация Pro
    Аватар для zerkmax  
    Мастер форумных наук

    4 Медалей
    Цитата Сообщение от FLevel Посмотреть сообщение
    коллеги, помогите советом, если это вобще возможно в моем случае :D
    мне нужно, чтобы робот одновременно открывался в обе стороны (и бай и селл).
    если тупо изобразить вот так:
    if(условие открытия сделки)
    {
    BuyOp=true;
    SellOp=true;
    }
    то тогда открываемся в обе стороны, но мне нужно, чтобы параметры тейкпрофита и стоплосса были разные для бая и для селла.
    может кто-нибудь поделится мыслями / частью кода? Или по крайней мере объяснить, в каких "блоках" советника нужна правка.
    сам только начинаю ковыряться в mql, задача сложновата для меня, дальше создания переменных
    extern int TakeProfit2
    extern int StopLoss2
    не осилил :D дальше - дремучий лес
    заранее спасибо!
    а какой советник правишь? выложи сюда, но похоже что какой то мой
  5. 2,974
    Комментарии
    7
    Темы
    2995
    Репутация Pro
     
    Banned

    4 Медалей
    Цитата Сообщение от FLevel Посмотреть сообщение
    коллеги, помогите советом, если это вобще возможно в моем случае :D
    мне нужно, чтобы робот одновременно открывался в обе стороны (и бай и селл).
    если тупо изобразить вот так:
    if(условие открытия сделки)
    {
    BuyOp=true;
    SellOp=true;
    }
    то тогда открываемся в обе стороны, но мне нужно, чтобы параметры тейкпрофита и стоплосса были разные для бая и для селла.
    может кто-нибудь поделится мыслями / частью кода? Или по крайней мере объяснить, в каких "блоках" советника нужна правка.
    сам только начинаю ковыряться в mql, задача сложновата для меня, дальше создания переменных
    extern int TakeProfit2
    extern int StopLoss2
    не осилил :D дальше - дремучий лес
    заранее спасибо!
    код с поста чуть повыше, слегка изменённый..;)
    Дист - стоплевел из маркетинфо

    Код:
    старт{
    ...
    щитаем СЛ и ТП в пойнтах
    double DTP1=(Dist+TP1)*Point;//ТейкПрофит1, ТП1 задается где-то выше..
    double DTP2=(Dist+TP2)*Point;//ТейкПрофит2, ТП2 задается где-то выше..
    double DSL1=(Dist+SL1)*Point;//СтопЛосс1, СЛ1 задается где-то выше..
    double DSL2=(Dist+SL2)*Point;//СтопЛосс2, СЛ2 задается где-то выше..
    
    if(AccountFreeMarginCheck(SMB,OP_BUY,Lot)<=0 || GetLastError()==134) return(-2);// мало денег - уходим
    OrderSend(SMB,OP_BUYSTOP,Lot,Ask+DP,0,Bid-DSL1,Ask+DTP1)// купили
    if(AccountFreeMarginCheck(SMB,OP_SELL,Lot)<=0 || GetLastError()==134) return(-2);// мало денег - уходим
    OrderSend(SMB,OP_SELLSTOP,Lot,Bid-DP,0,Ask+DSL2,Bid-DTP2)// продали
    //Почему отложенники? - чтоб открыться по цене, а не по рынку..))))
    ...
    возврат}
    Проверку, открылись ли ордера, добавь, вестимо;)
    ++
    Если надо открыться по одной цене - DP=0, ордера - комбинация из Лимита и Стопа..
  6. 88
    Комментарии
    0
    Темы
    88
    Репутация Pro
     
    В начале пути

    2 Медалей
    Может быть кто подскажет почему не работает в инвесторе вот это?

    if ((TimeCurrent()-OrderOpenTime()>10) && (OrderType()==OP_SELL))
    OrderClose(OrderTicket(),OrderLots(),MODE_ASK,3,CL R_NONE);

    Спасибо.
  7. 1,156
    Комментарии
    4
    Темы
    1189
    Репутация Pro
    Аватар для zerkmax  
    Мастер форумных наук

    4 Медалей
    Цитата Сообщение от pavivas Посмотреть сообщение
    Может быть кто подскажет почему не работает в инвесторе вот это?

    if ((TimeCurrent()-OrderOpenTime()>10) && (OrderType()==OP_SELL))
    OrderClose(OrderTicket(),OrderLots(),MODE_ASK,3,CL R_NONE);

    Спасибо.
    что конкретно не работает? закрывается не по той цене (MODE_ASK)?
    закрытие происходит по рыночной цене не смотря на то что ты указал
  8. 88
    Комментарии
    0
    Темы
    88
    Репутация Pro
     
    В начале пути

    2 Медалей
    Пробовал вместо MODE_ASK просто ASK .
  9. 1,156
    Комментарии
    4
    Темы
    1189
    Репутация Pro
    Аватар для zerkmax  
    Мастер форумных наук

    4 Медалей
    Цитата Сообщение от pavivas Посмотреть сообщение
    Пробовал вместо MODE_ASK просто ASK .
    так без разницы, он закрывает по рынку, какая цена на момент команды серверу по такой и закроется, даже несмотря на указанное проскальзывание
  10. 88
    Комментарии
    0
    Темы
    88
    Репутация Pro
     
    В начале пути

    2 Медалей
    Если можно пример закрытия ордера по рынку.
    OrderClose(.....)

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

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