Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Дэйв,
Не сдавайся так легко. Если я скажу тебе, что делать, это может быть неправильно, и ты никогда не научишься правильному.
Вот еще одна попытка.
Удачи.
for (int cnt1=OrdersTotal()-1;cnt1>=0;cnt1--)
{
OrderSelect(cnt1, SELECT_BY_POS, MODE_TRADES);
if (OrderType()>=OP_SELL && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+(15 *Point),Bid-(20*Point),Cyan); //Modify stop loss and take profit
return(0);
}
if (OrderType()>=OP_BUY && OrderSymbol()==Symbol() && (OrderMagicNumber () == MagicNumber || MagicNumber==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-(15*Point),Ask+(20*Point),Cyan); //Modify stop loss and take profit
return(0);
}
}
как узнать, что мой ордер достиг стоп-лосса?
Привет, ребята
Я программирую советника, который использует трейлинг-стоп. Дело в том, что когда ордер достигает стоп-лосса, он открывает новый ордер. Так вот, вопрос в том, как сказать советнику, что когда ордер попадает в стоп-лосс, то нужно ждать следующего бара, чтобы решить, открывать ли новый ордер, помогите, пожалуйста.
Где здесь происходит модификация? Первоначальный стоп-лосс был 40, а тейк-профит - 100. В рамках спящего режима стоп-лосс должен измениться на 15 для всех существующих открытых ордеров, а тейк-профит - на 25 для всех существующих открытых ордеров.
Билеты открытых ордеров: До спящего режима.
До спящего режима стоп-лосс - 40 До спящего режима тейк-профит-100 После спящего режима модификация стоп-лосса -15 После спящего режима модификация тейк-профита - 25
Я не инициализирую настройки ордеров, я модифицирую существующие ордера, уже размещенные и все еще активные.
В любом случае, спасибо за помощь! Почему что-то такое простое кажется таким сложным?
как вы определяете спящий режим?
Просто добавьте его перед циклом ordermodify().
например...
if(sleepcome)
{
for(.....)
{
//delete my code gave you before or make it as comment
orderselect(.....);
.
.
.
}
}
может это поможет
Привет, ребята, я программирую советника, который использует трейлинг-стоп. Дело в том, что когда он бьет стоп-лосс, то открывает новый ордер. Так вот, вопрос в том, как сказать советнику, что когда ордер бьет стоп-лосс, то нужно ждать следующего бара, чтобы решить, открывать ли новый ордер, помогите, пожалуйста.
проверьте историю торговли, если ordercloseprice() = orderstoploss(), то он закрывается, пробив sl
for(int hcnt=0;hcnt<HistoryTotal();hcnt++)
{
OrderSelect(hcnt, SELECT_BY_POS, MODE_HISTORY);
if(OrderSymbol()==Symbol())
{
if(OrderClosePrice()==OrderStopLoss())
.
.
.
}
}
Время стоп-лосса
проверить историю торговли, если ordercloseprice() = orderstoploss(), то ордер закрылся, пробив sl
for(int hcnt=0;hcnt<HistoryTotal();hcnt++)
{
OrderSelect(hcnt, SELECT_BY_POS, MODE_HISTORY);
if(OrderSymbol()==Symbol())
{
if(OrderClosePrice()==OrderStopLoss())
.
.
.
}
}
Спасибо за идею. Я также хочу знать время его стоп-лосса и находится ли это время в текущем баре. У меня может быть много стоп-лоссов, но я хочу знать, попадает ли он в стоп-лосс на текущем баре. Должен ли я проверить время закрытия ордера и сравнить его со временем текущего бара?
отображение покупок и продаж в советнике
Я хотел бы поместить стрелки или текстовые объекты или что-то еще на график во время работы советника, чтобы показать его действия, но объекты, похоже, не появляются. У кого-нибудь есть работающий пример советника, который рисует на графике?
Кроме того, в тестере стратегий есть кнопка для отображения графика после выполнения теста, но я не вижу стрелок. Это проблема с билдом 195, потому что я знаю, что видел их там в прошлом. Как можно изменить эти объекты со стрелками? Я бы хотел сделать их больше, но не знаю, как добраться до графика в тестере.
Полагаю, обе проблемы одинаковы: получение обратной связи от пользователей советников.
У меня есть эксперт, который я настраиваю, и я хотел избежать сигнала входа, если предыдущий закрытый бар был очень длинным. (>30 пунктов) Я добавил фразу ниже в качестве условия, но, похоже, она не была распознана. Я не очень хороший кодер, но мне повезло с экспертами по настройке, и я учусь на ходу. Может ли кто-нибудь сказать мне, какую логику или фразу я должен здесь использовать?
В разделе;
-----------------------------------
void CheckForSignals() {
-----------------------------------
Я включил условие;
-----------------------------------
if ((Close[1])-(Open[1])<30 ) {
buysig=true;
-----------------------------------
Спасибо за любые предложения,
MJ
У меня есть эксперт, который я настраиваю, и я хотел избежать сигнала входа, если предыдущий закрытый бар был очень длинным. (>30 пунктов) Я добавил фразу ниже в качестве условия, но, похоже, она не была распознана. Я не очень хороший кодер, но мне повезло с экспертами по настройке, и я учусь на ходу. Может ли кто-нибудь сказать мне, какую логику или фразу я должен здесь использовать?
если ((Close[1])-(Open[1])<30) ...
MJMJ,
Если предположить, что Close[1] находится, например, на 1.2835, а Open[1] на 1.2805 (бычий бар), то разница составляет 0.0030, поэтому проверка против 30 не сработает. Более того, что если Close[1] находится на уровне 1.2805, а Open[1] на уровне 1.2835 (медвежий бар)? Вы получите -0.0030.
Итак, прежде всего, вам нужно использовать Close[1]-Open[1] < (30*Point), чтобы исправить первую проблему, а затем использовать функцию MathAbs(), чтобы получить абсолютное значение вычитания.
Короче говоря, используйте: if MathAbs(Close[1]-Open[1])<(30*Point).....
HTH
Яннис
Код для предотвращения входа в сделку по длинному бару
MJ,
Если предположить, что Close[1] находится, например, на 1.2835, а Open[1] на 1.2805 (бычий бар), то разница составит 0.0030, поэтому проверка против 30 не сработает. Более того, что если Close[1] находится на уровне 1.2805, а Open[1] на уровне 1.2835 (медвежий бар)? Вы получите -0.0030.
Итак, прежде всего, вам нужно использовать Close[1]-Open[1] < (30*Point), чтобы исправить первую проблему, а затем использовать функцию MathAbs(), чтобы получить абсолютное значение вычитания.
Короче говоря, используйте: if MathAbs(Close[1]-Open[1])<(30*Point).....
HTH
ЯннисБольшое спасибо Яннис. Ваше объяснение очень понятно, и я ценю включение фактического кода. Могу ли я задать дополнительный вопрос? Если я хочу иметь возможность регулировать количество пунктов для длинного бара в окне свойств эксперта, могу ли я использовать;
extern int LBE=30; // LBE - это 'Long Bar Entry'. По умолчанию может быть 30
в разделе заголовка эксперта, а затем использовать LBE вместо 30 в вашей строке кода?
if MathAbs(Close[1]-Open[1])<(LBE*Point)
Это позволило бы мне тестировать варианты настроек пунктов вручную, и оптимизировать их при обратном тестировании.
MJ