Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Рекомендую.
Когда вы решите все эти проблемы, вы сможете считать себя одним из профессионалов.
Делайте вещи как можно сложнее, тогда вы научитесь большему.
В противном случае вы будете постоянно бороться с простыми вещами.
Прежде всего, большое спасибо за ваши комментарии.
После ваших комментариев я решил, что должен еще раз создать блоки кода Order Modification для уверенности и для тестирования.
Г-н @Marco vd Heijden
После ваших замечаний/примеров я уже написал код для перетаскивания цены тейк-профита.
Но вообще-то я против постоянных обновлений. Почему? С тех пор, как я написал блоки кода для перетаскивания тейк-профита, я вижу, что мой график медленно обновляется. Возможно, я допустил ошибки в этой части кода. Я проверю это после того, как решу этот вопрос.
(пока я пытался решить свой вопрос самостоятельно, после нескольких попыток, я подумал, что нет возможности остановить вычисления, если я использую оператор цикла " for " )
Я хотел бы отметить, что у меня уже есть расчеты для размеров тейк-профита и стоп-лосса, поэтому я удалил оператор "Switch" из кода ниже.
Я просто пробую, когда цена тейк-профита будет равна цене линии - тогда стоп рассчитывается / обновляется до следующего раза, когда цена тейк-профита "!= цене линии".
В: Мне трудно исправить приведенный ниже код. Что я могу сделать для этого, пожалуйста?
В: Я делаю неправильно, что не использую оператор "Switch" для решения этой проблемы?
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
for(int order=OrdersTotal(); order>=0; order--)
{
bool selected=OrderSelect(order,SELECT_BY_POS);
{
if(selected==1)
{
if(Symbol()==OrderSymbol()) // only for current chart symbol
{
/* I just try for - if price not equal != "Line OBJPROP_PRICE "
stop updates */
// if objects not found - create them
// ...
// if objects exist
// ...
while(price!=ObjectGetDouble(0,"line",OBJPROP_PRICE,0))
{
PlaySound("ok.wav");
price=ObjectGetDouble(0,"line",OBJPROP_PRICE,0);
Comment(price);
}
}
}
}
}
}
//+------------------------------------------------------------------+
Пока я читал документацию и книгу по OrderModify() с примером, я не увидел примера именно для моей проблемы.
Всего вам наилучшего!
Я не следил за этой темой, поэтому мог пропустить то, что вы делаете.
Прежде всего, упрощайте:
{
bool selected=OrderSelect(order,SELECT_BY_POS);
{
if(selected==1)
{
if(OrderSelect(order,SELECT_BY_POS)
Также подумайте о том, как часто вы двигаете линию. Раз в секунду? Скорее всего, нет.
Поместите свой код в OnChartEvent():
{
if(id==CHARTEVENT_OBJECT_DRAG && sparam=="line") // the chart event of dragging the line
Вы вызываете одну и ту же функцию несколько раз на каждом открытом ордере:
{
PlaySound("ok.wav");
price=ObjectGetDouble(0,"line",OBJPROP_PRICE,0);
Comment(price);
}
Вызовите ее один раз перед тем, как войти в цикл ордеров:
for(int order=OrdersTotal()-1; order>=0; order--)
{
Убедитесь, что вы понимаете принцип работы циклов while.
Это опасно, потому что если по какой-то причине другой советник попытается изменить значение цены линии, то в результате этот кусок кода застрянет в бесконечном цикле, и ваш терминал, скорее всего, зависает.
Обычно это заканчивается аномальным завершением работы.
Поскольку вы используете объект "line", опасность не так велика, как в случае с уровнями tp и sl, которые посылаются на сервер функцией OrderModify(), поэтому, если вы не планируете написать другой советник, который будет вмешиваться в "line", это не должно быть проблемой.
Я не следил за этой темой, поэтому мог пропустить то, что вы делаете.
Назовите его один раз, прежде чем войти в цикл приказа:
for(int order=OrdersTotal(); order>=0; order--)
{
Пожалуйста, поймите, что он пытается сделать.
Он должен позвонить два раза и сравнить значения, чтобы узнать, была ли линия перемещена.
Это невозможно сделать, не прочитав значение дважды.
{
PlaySound("ok.wav");
price=ObjectGetDouble(0,"line",OBJPROP_PRICE,0);// now overwrite old line value with new line value.
Comment(price);
}
Пожалуйста, поймите, что он пытается сделать.
Он должен вызвать два раза и сравнить значения, чтобы узнать, была ли линия перемещена.
Это невозможно сделать без двойного считывания значения.
Вам придется объяснить мне это еще раз.
Если у вас есть CHARTEVENT_OBJECT_DRAG и sparam - "line", значит, линия переместилась.
В редких случаях, когда она перемещается по времени вдоль одной и той же цены, штраф невелик.
Существует множество способов сделать одно и то же.
Если вы решите использовать CHARTEVENT, помните, что он не работает в тестере.
Я уже прочитал ваши полезные комментарии, мистер Марко, мистер Кнаве, мистер Уильям, спасибо большое за все эти комментарии!
Сейчас я уже проверил несколько вещей и также решил, что могу написать ( / и проверить) OrderModify() шаг за шагом. Потому что этот OrderModify() действительно очень опасен для меня.
Несколько раз я уже сталкивался с неправильными модификациями. Но когда я пытаюсь решить те же проблемы/вопросы, что я точно знаю, откуда берутся эти проблемы, даже я пробую те же вещи в диаграмме, что проблемы/вопросы не повторялись. Через несколько часов я снова столкнулся с той же проблемой.
Я все еще не знаю, что именно вызвало эту проблему. Что такое проблема, о которой я говорю. Я уже поделился с вами одной из них в своем предыдущем комментарии. Также я открыл одну позицию с помощью моего советника Trade Panel, все в порядке! Затем я попытался открыть Sell Limit методом ручной торговли. (в моей торговой панели еще нет отложенных ордеров Sell Limit или Sell Stop).
Итак, я думаю, что должен поделиться с вами кодами этого блока, но пока я не могу поделиться ими, потому что я все еще работаю над ним. Я хочу переместить коды этого блока в OnChartEvent() - потому что также я добавлю в него несколько кнопок.
Проблема: Я не могу написать код, если ордер закрыт, то удалите его объекты, как это, Stop Loss, Take Profit, Open, Close стрелки что-то вроде этого, пожалуйста, помогите мне.
Вопрос: Также Stop Loss, Take Profit Lines перед объектами торговой панели. Я знаю, что это вызвано последним созданием объекта. Но если вы понимаете меня, пожалуйста, дайте мне знать, как я могу сделать, чтобы объект торговой панели был перед всеми другими объектами без линий "Stop Loss и Take Profit".
Заранее спасибо.