Спрашивайте! - страница 32

 

Дэйв,

Не сдавайся так легко. Если я скажу тебе, что делать, это может быть неправильно, и ты никогда не научишься правильному.

Вот еще одна попытка.

Удачи.

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);

}

}

 

как узнать, что мой ордер достиг стоп-лосса?

Привет, ребята

Я программирую советника, который использует трейлинг-стоп. Дело в том, что когда ордер достигает стоп-лосса, он открывает новый ордер. Так вот, вопрос в том, как сказать советнику, что когда ордер попадает в стоп-лосс, то нужно ждать следующего бара, чтобы решить, открывать ли новый ордер, помогите, пожалуйста.

 
 
iscuba11:
Где здесь происходит модификация? Первоначальный стоп-лосс был 40, а тейк-профит - 100. В рамках спящего режима стоп-лосс должен измениться на 15 для всех существующих открытых ордеров, а тейк-профит - на 25 для всех существующих открытых ордеров.

Билеты открытых ордеров: До спящего режима.

До спящего режима стоп-лосс - 40 До спящего режима тейк-профит-100 После спящего режима модификация стоп-лосса -15 После спящего режима модификация тейк-профита - 25

Я не инициализирую настройки ордеров, я модифицирую существующие ордера, уже размещенные и все еще активные.

В любом случае, спасибо за помощь! Почему что-то такое простое кажется таким сложным?

Дэйв <<

как вы определяете спящий режим?

Просто добавьте его перед циклом ordermodify().

например...

if(sleepcome)

{

for(.....)

{

//delete my code gave you before or make it as comment

orderselect(.....);

.

.

.

}

}

может это поможет

 
AnasFX:
Привет, ребята, я программирую советника, который использует трейлинг-стоп. Дело в том, что когда он бьет стоп-лосс, то открывает новый ордер. Так вот, вопрос в том, как сказать советнику, что когда ордер бьет стоп-лосс, то нужно ждать следующего бара, чтобы решить, открывать ли новый ордер, помогите, пожалуйста.

проверьте историю торговли, если ordercloseprice() = orderstoploss(), то он закрывается, пробив sl

for(int hcnt=0;hcnt<HistoryTotal();hcnt++)

{

OrderSelect(hcnt, SELECT_BY_POS, MODE_HISTORY);

if(OrderSymbol()==Symbol())

{

if(OrderClosePrice()==OrderStopLoss())

.

.

.

}

}

 

Время стоп-лосса

phoenix:
проверить историю торговли, если 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

 
marketjouster:
У меня есть эксперт, который я настраиваю, и я хотел избежать сигнала входа, если предыдущий закрытый бар был очень длинным. (>30 пунктов) Я добавил фразу ниже в качестве условия, но, похоже, она не была распознана. Я не очень хороший кодер, но мне повезло с экспертами по настройке, и я учусь на ходу. Может ли кто-нибудь сказать мне, какую логику или фразу я должен здесь использовать?

если ((Close[1])-(Open[1])<30) ...

MJ

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

Яннис

 

Код для предотвращения входа в сделку по длинному бару

Yannis:
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