Как будет выглядеть код для открытия в одну сторону знаешь? В другую тоже знаешь? А между ними ставишь RefrasheRates().
< Как будет выглядеть код для открытия в одну сторону знаешь?
В другую тоже знаешь? А между ними ставишь RefrasheRates(). >
С обязательным тайм-аутом, если торговый поток занят:
С обязательным тайм-аутом, если торговый поток занят:
//+------------------------------------------------------------------+ //| Проверка состояния торгового потока - можно ли торговать | //+------------------------------------------------------------------+ void CheckTradeContext(int time_out) { //---- if (!IsTesting()) { // если торговый поток занят, "засыпаем" на случайное время, не меньшее тайм-аута while (IsTradeContextBusy() == true) { Sleep(time_out * MathRound(1000. * (1.0 + (MathRand() / 32768.)))); } } //---- return; }Что-то вроде этого. Грубо, но работает. Я беру тайм-аут от 30 секунд.
Вообще если надо стопудово открыть второй ордер, то следует поставить флаг в статической переменной о необходимости открытия и обнулять его после успешного открытия, еще потребуется выполнять проверку не ушла ли цена далеко и не прошло ли слишком много времени и в соответствии с этим принимать необходимые меры.
Вот-вот. Работы тут - вагон и маленькая тележка, со всеми необходимыми проверками. Еще слава богу, что надобность в глобальных переменных (семафорах) для контроля состояния, если не отпала совсем, то значительно сократилась.
{ //Low[1]-Delta*Point,Ask+TakeProfit*Point ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,5,Ask-Stop*Point,0, "priceEX",16384,0,Green); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); //MODE_TRADES } else Print("Error opening BUY order : ",GetLastError()); return(0); } { //Bid+TrailingStop*Point,Bid-TakeProfit*Point ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,5,Bid+Stop*Point, 0,"priceEX",16384,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); //,MODE_TRADES } else Print("Error opening SELL order : ",GetLastError()); return(0); }
а зачем нужен RefrasheRates(). и куда вставить его? в документации ничего не понятно, объясните поподробнее пожалуйста. Вообже идея такая: открываем одновременно buy sell потом при достижении определенноо уровня тейк профит закрывается одна позиция например buy и в этот момент открываем sell но в два раза больше закрытого buy и тейк профит в два раза меньше. Как сделать это?
// < а зачем нужен RefrasheRates(). и куда вставить его? > // Например, сюда (в минус первом приближении): // RefreshRates(); // обновляем цены перед открытием первого ордера // { //Low[1]-Delta*Point,Ask+TakeProfit*Point ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,5,Ask-Stop*Point,0, "priceEX",16384,0,Green); if(ticket>0) { f(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); //MODE_TRADES } else Print("Error opening BUY order : ",GetLastError()); return(0); } // проверяем, свободен ли торговый поток - см. список ошибок // времени выполнения при операциях с ордерами CheckTradeContext(TimeOut); // extern int TimeOut = 30; // тайм-аут в секундах - во внешних настройках RefreshRates(); // обновляем цены перед открытием второго ордера // { //Bid+TrailingStop*Point,Bid-TakeProfit*Point ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,5,Bid+Stop*Point, 0,"priceEX",16384,0,Red); if(ticket>0) { if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice()); //,MODE_TRADES } else Print("Error opening SELL order : ",GetLastError()); return(0); } // Насчет RefreshRates() в документации хорошо написано, зачем это нужно. // Да и на форумах, здешнем и соседнем, эта тема много раз обсуждалась. Поищи.
а зачем нужен RefrasheRates(). и куда вставить его? в документации ничего
не понятно, объясните поподробнее пожалуйста. Вообже идея такая:
открываем одновременно buy sell потом при достижении определенноо
уровня тейк профит закрывается одна позиция например buy и в
этот момент открываем sell но в два раза больше закрытого buy и
тейк профит в два раза меньше. Как сделать это?
RefreshRates(): Bid и Ask имеют значение цены, которое было на момент начала выполнения функции start(), пока один ордер открывается, цена может измениться и у второго будет реквоте, поэтому надо обновить значение котировок RefresheRates() и отправлять второй ордер по текущей цене.
Если знаешь точку в которой следует закрыть один ордер и открыть удвоенный, то проще открыть один ордер в этот момент. Но если эта подпорка помогает, то всеравно лучше отметить точку в которой типа открываешь два ордера, потом в точке в которой типа должен закрыть и открыть удвоенный - открыться один раз.
projectX писал (а):
Вообже идея такая: открываем одновременно buy sell потом при достижении определенноо уровня тейк профит закрывается одна позиция например buy и в этот момент открываем sell но в два раза больше закрытого buy и тейк профит в два раза меньше. Как сделать это?
Вообже идея такая: открываем одновременно buy sell потом при достижении определенноо уровня тейк профит закрывается одна позиция например buy и в этот момент открываем sell но в два раза больше закрытого buy и тейк профит в два раза меньше. Как сделать это?
Ты так на один спред будешь работать... Зачем вообще открывать два разнонаправленных ордера? Запоминай текущее положение цены и дальше контролируй отклонение от неё. Цены запоминай в глобальных переменных или выгружай во внешний файл для устойчивости эксперта к перезапускам.
projectX писал (а):
а зачем нужен RefrasheRates(). и куда вставить его? в документации ничего не понятно, объясните поподробнее пожалуйста. Вообже идея такая: открываем одновременно buy sell потом при достижении определенноо уровня тейк профит закрывается одна позиция например buy и в этот момент открываем sell но в два раза больше закрытого buy и тейк профит в два раза меньше. Как сделать это?
Не нужно никакого освежителя. Потому, что задача по условию выполняется
совсем иным образом. То бишь не открываешь сразу две встречные
(лишняя возня), а ставишь отложенные StopLimit ордера, на тех местах,
где раньше планировал ставить тейки c заранее выставленными
удвоенными тейками.а зачем нужен RefrasheRates(). и куда вставить его? в документации ничего не понятно, объясните поподробнее пожалуйста. Вообже идея такая: открываем одновременно buy sell потом при достижении определенноо уровня тейк профит закрывается одна позиция например buy и в этот момент открываем sell но в два раза больше закрытого buy и тейк профит в два раза меньше. Как сделать это?
Встречной позицией лучше всего локировать уже открытый ордер, если по тех. или фунд. анализу сложно определить куда наиболее вероятно двинет цена.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Если не очень тяжело то как это будет выглядеть в виде кода?