[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 10
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Подскажите, можно ли программно определить возможность установки стоп-лосса/тейк-профита сразу при открытии позиции/установки отложенного ордера либо после?
Предварительно проверьте уровни установки стопов и профитов .
Идентификаторы запроса, используемые в функции MarketInfo(). Mогут быть одной из следующего величин:
Всем здрасти! только учусь написанию советников, как и многие первые советники на обычных стандартных идикаторах, написать написал вот только, теперь усложнил себе задачу, но не знаю как будет выглядеть код. Вообщем как сделать, чтобы при возникновении условий открывалась позиция и при ее закрытии допустим по тейку при сохраннении техже условий, новая не открывалась, а открывалась, только при возникновении противоположных условий и т.д. Спасибо!!!
там в хелпе почти готовый пример готовый пример
Предварительно проверьте уровни установки стопов и профитов .
В этом списке нет проверки для определённых типов счетов. Вот пункт из Регламента Торговых Операций для счетов NDD:
3.3. Если позиция открывается через клиентский терминал с использованием советника, Клиент не может обозначить уровни Stop Loss и/или Take Profit Orders. Если Клиент желает разместить эти ордера, он может сделать это, модифицировав существующую позицию в соответствии с пунктами 5.16 - 5.22 и 9.13 - 9.16.
Меня интересует можно ли это проверить программно. Как я понял, нет. В программу нужно изначально писать функцию открытия позиций/установки отложенных ордеров с учётом тех условий, которые установил брокер.В этом списке нет проверки для определённых типов счетов. Вот пункт из Регламента Торговых Операций для счетов NDD:
Как то не совсем понятны правила установки ордеров, попробуйте поиграть на демо, что можно а что нет . На сколько я понял ничто не мешает програмно установить ордер, а затем его модифицировать .Право как то странно, если только не отрубать вам связь после открытия позиции оставив без стопа .
Меня интересует можно ли это проверить программно. Как я понял, нет. В программу нужно изначально писать функцию открытия позиций/установки отложенных ордеров с учётом тех условий, которые установил брокер.В этом списке нет проверки для определённых типов счетов. Вот пункт из Регламента Торговых Операций для счетов NDD:
Проблемы нет никакой. Даже (если не в личное пользование, ибо сам то знаешь на каких счетах (торговых условиях и у кого) его пользовать), но если советника далаешь на заказ и клиент сам еще не определился на каких счетах и где будет его использовать, даже на типах счетов с возможностью установки сразу тейка и стопа, то все равно по умолчанию изготавливаете советника с нулевыми значениями этих уровней при установке всех типов ордеров, далее уже с их модификацией (будет работать и там и там), при этом, естественно никто не отменял проведение проверки требований и ограничений при проведении торговых операций при любых вариантах установки и последующей модификации всех типов ордеров и уровней стопов и тейков в той или иной конторе.
Как то не совсем понятны правила установки ордеров, попробуйте поиграть на демо, что можно а что нет . На сколько я понял ничто не мешает програмно установить ордер, а затем его модифицировать .Право как то странно, если только не отрубать вам связь после открытия позиции оставив без стопа .
))) Нет. Вы меня совсем не поняли. Я писал не про "программно установить", а про программно определить. На некоторых типах счетов нельзя сразу открывать позицию и устанавливать стопы/тейки, что для меня было бы предпочтительней/безопасней. На mql5, если не ошибаюсь вроде бы можно это определять. Хотелось бы иметь возможность определять этот момент и в зависимости от определения выбирать, какую функцию использовать.
Проблемы нет никакой. Даже (если не в личное пользование, ибо сам то знаешь на каких счетах (торговых условиях и у кого) его пользовать), но если советника далаешь на заказ и клиент сам еще не определился на каких счетах и где будет его использовать, даже на типах счетов с возможностью установки сразу тейка и стопа, то все равно по умолчанию изготавливаете советника с нулевыми значениями этих уровней при установке всех типов ордеров, далее уже с их модификацией (будет работать и там и там), при этом, естественно никто не отменял проведение проверки требований и ограничений при проведении торговых операций при любых вариантах установки и последующей модификации всех типов ордеров и уровней стопов и тейков в той или иной конторе.
Да, проблемы нет, когда есть решение. Нужно просто пользоваться тем, что есть и пользоваться при этом правильно.))
Roman. и ivandurak СПАСИБО огромное что ответили, но для меня это пока тяжко разобрать, я нашел еще на одном форуме предложение как это сделать, вот только пока применить не могу к своему обычному коду
int BuyTrue, SellTrue;// определяем переменные которые будут служить нам вышеуказанными флагами
....
//--- Условие для Buy
if (BuyTrue==0 && ... и плюс другие Ваши условия) // Условие открытия позы
{
....
OrderSend(....); //функция для открытия ордера
BuyTrue=1; // При BuyTrue=1 условие для открытия позы не будет полностью удовлетворяться
// следовательно при повторном сигнале на бай сделка открываться не будет
SellTrue=0; // При SellTrue=0 условие для открытия позы будет полностью удовлетворяться
// следовательно следующеей сделкой будет только Sell
....
}
//--- Условие для Sell
if (SellTrue==0 && ... и плюс другие Ваши условия) // Условие открытия позы
{
....
OrderSend(....); //функция для открытия ордера
SellTrue=1; // При SellTrue=1 условие для открытия позы не будет полностью удовлетворяться
// следовательно при повторном сигнале на Sell сделка открываться не будет
BuyTrue=0; // При BuyTrue=0 условие для открытия позы будет полностью удовлетворяться
// следовательно следующеей сделкой будет только Buy
....
}
Мой код открытия сделки
total=OrdersTotal();
if(total<1)
{
// no opened orders identified
if(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
// check for long position (BUY) possibility
if(MACD1<0 && MACD2<MACD1 && MACD2>MACD3 && MathAbs(MACD1)>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"macd sample",16384,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
return(0);
}
// check for short position (SELL) possibility
if(MACD1>0 && MACD2>MACD1 && MACD1>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"macd sample",16384,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
return(0);
}
return(0);
}
Roman. и ivandurak СПАСИБО огромное что ответили, но для меня это пока тяжко разобрать, я нашел еще на одном форуме предложение как это сделать, вот только пока применить не могу к своему обычному коду
int BuyTrue, SellTrue;// определяем переменные которые будут служить нам вышеуказанными флагами
....
//--- Условие для Buy
if (BuyTrue==0 && ... и плюс другие Ваши условия) // Условие открытия позы
{
....
OrderSend(....); //функция для открытия ордера
BuyTrue=1; // При BuyTrue=1 условие для открытия позы не будет полностью удовлетворяться
// следовательно при повторном сигнале на бай сделка открываться не будет
SellTrue=0; // При SellTrue=0 условие для открытия позы будет полностью удовлетворяться
// следовательно следующеей сделкой будет только Sell
....
}
//--- Условие для Sell
if (SellTrue==0 && ... и плюс другие Ваши условия) // Условие открытия позы
{
....
OrderSend(....); //функция для открытия ордера
SellTrue=1; // При SellTrue=1 условие для открытия позы не будет полностью удовлетворяться
// следовательно при повторном сигнале на Sell сделка открываться не будет
BuyTrue=0; // При BuyTrue=0 условие для открытия позы будет полностью удовлетворяться
// следовательно следующеей сделкой будет только Buy
....
}
Мой код открытия сделки
total=OrdersTotal();
if(total<1)
{
// no opened orders identified
if(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
// check for long position (BUY) possibility
if(MACD1<0 && MACD2<MACD1 && MACD2>MACD3 && MathAbs(MACD1)>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"macd sample",16384,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
return(0);
}
// check for short position (SELL) possibility
if(MACD1>0 && MACD2>MACD1 && MACD1>(MACDOpenLevel*Point))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"macd sample",16384,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
return(0);
}
return(0);
}
Во-первых, вставляйте Ваш код в редакторе через Ctrl+Alt+M (либо сверху в меню нажмите SRC), иначе плохо, чего понятно - все сливается под одно...:-)))
Во-вторых, прочтите учебник, в частности инфу по той ссылочке, что Вам рекомендовал, там ниже кода идет его описание и в самом конце описания как раз расписано - каким образом однократно сообщать о цене выше/ниже МА (у Вас будет аналогия с однократным входом по данному торговому условию-использование флагов и все), прежде, чем ТВОРИТЬ свое ВОЛШЕБСТВО...:-)))
П.С. или в поиске через гугл наберите: Как правильно вставить код site:mql4.com