Теперь мои вопросы: как реализовать в моем советнике трейлинг стоп, т.к. из-за его отсутствия зачастую теряется прибыль?
Как сделать, чтобы советник открывал только один ордер для данной валютной пары при установке на нескольких валютах?
А если задача в написании конкретного советника, то проще/быстрее/дешевле будет заказать его у профессионала.
читай тут
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордерСпасибо за ссылки, почитал. Вопросы всё равно есть. :) Вот сделал такой код для того, чтобы советник открывал только один ордер для данной валютной пары при установке на нескольких валютах. Как проверить - не знаю, поэтому спрашиваю здесь - он правильный?
{//-1
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ //-2 // Анализ ордеров:
if (OrderSymbol()!= Symb)
{//-3
if (signal1>80)
if (signal2>0)
if (signal3>0)
if (signal4>0)
{
OrderSend(Symbol(),OP_BUY,lot_trade,Ask,3,Bid-50*Point,Ask+50*Point,"Lukyanov AutoTrader BUY",7773,0,Blue);
OrderPrint();
}
if (signal1<20)
if (signal2==0)
if (signal3<0)
if (signal4<0)
{
OrderSend(Symbol(),OP_SELL,lot_trade,Ask,3,Bid+50*Point,Ask-50*Point,"Lukyanov AutoTrader SELL",7773,0,Red);
OrderPrint();
}
}//-3
}//-2
}//-1
Спасибо за ссылки, почитал. Вопросы всё равно есть. :) Вот сделал такой код для того, чтобы советник открывал только один ордер для данной валютной пары при установке на нескольких валютах. Как проверить - не знаю, поэтому спрашиваю здесь - он правильный?
Проверять можно в тестере
int OpenOrder = 0;
for(int io=1; io<=OrdersTotal(); io++) // Цикл перебора ордер
{//-1
if (OrderSelect(io-1,SELECT_BY_POS)==true) // Если есть следующий
{ //-2 // Анализ ордеров:
if (OrderSymbol() == Symb)
{//-3
OpenOrder = 1;
}//-3
else OpenOrder = 0;
}//-2
}//-1
if (OpenOrder == 0)
{
if (signal1>80)
if (signal2>0)
if (signal3>0)
if (signal4>0)
{
OrderSend(Symbol(),OP_BUY,lot_trade,Ask,3,Bid-50*Point,Ask+50*Point,"Lukyanov AutoTrader BUY",7773,0,Blue);
OrderPrint();
}
if (signal1<20)
if (signal2==0)
if (signal3<0)
if (signal4<0)
{
OrderSend(Symbol(),OP_SELL,lot_trade,Ask,3,Bid+50*Point,Ask-50*Point,"Lukyanov AutoTrader SELL",7773,0,Red);
OrderPrint();
}
}
Неправильно (про тот, что выше).
Прежде, чем открыть ордер, необходимо пройти по всему списку ордеров и выяснить количество ордеров, открытых по данному финансовому инструменту.
В представленном же коде делается другое: Вы идёте в цикле по списку ордеров с некоторым (неправильным) анализом. А именно: Вы анализируеие первый попавшийся ордер, и если он не по нашему фин.инструменту, то (в зависимости от критериев открытия) открываете ордер. Но если Вы хотите, чтоб по одному фин инструменту был всего один ордер, то на этом этапе исследований нельзя сказать есть ли по этому инстр. ордера (возможно, что они в конце списка).
Общий (корректный) порядок событий должен быть такой: сначала учесть все ордера (запомнить все критерии), потом проанализировать те критерии, кот. являются "пропускным баллом" для открытия (колич. ордеров по инстр., колич. отложенных и рыночных и т.д.) и если "ситуация именно такова, которую мы искали", то открывать ордер.
(по опыту: не тратьте время на промежуточные коды-полуфабрикаты, вместо этого один раз сделайте полноценный учёт ордеров, он Вам 100 раз ещё пригодится)
"2008.01.04 20:39:46 Lukyanov_AT EURJPY,M15: Ошибка открытия ордера: 129
2008.01.04 20:39:46 Lukyanov_AT EURJPY,M15: #18706506 2008.01.04 14:30 sell 1.00 USDCHF 1.1076 1.1076 1.1026 1.1060 0.00 0.00 144.67 Lukyanov AutoTrader SELL 0
2008.01.04 20:39:46 Lukyanov_AT CADJPY,M15: Ошибка открытия ордера: 129
2008.01.04 20:39:46 Lukyanov_AT CADJPY,M15: #18706506 2008.01.04 14:30 sell 1.00 USDCHF 1.1076 1.1076 1.1026 1.1060 0.00 0.00 144.67 Lukyanov AutoTrader SELL 0
2008.01.04 20:39:46 Lukyanov_AT GBPJPY,M15: Ошибка открытия ордера: 129
2008.01.04 20:39:46 Lukyanov_AT GBPJPY,M15: #18706506 2008.01.04 14:30 sell 1.00 USDCHF 1.1076 1.1076 1.1026 1.1060 0.00 0.00 144.67 Lukyanov AutoTrader SELL 0
"
Прикрепляю своего советника. Где ошибка в советнике?
Прикрепляю своего советника. Где ошибка в советнике?
OrderSend(Symbol(),OP_BUY,lot_trade,Ask,3,Bid-50*Point,Ask+50*Point,"Lukyanov AutoTrader BUY",0,0,Blue); ... OrderSend(Symbol(),OP_SELL,lot_trade,Ask,3,Bid+50*Point,Ask-50*Point,"Lukyanov AutoTrader SELL",0,0,Red);
.. а надо Ask, Bid, Bid и Bid, Ask, Ask. Посмотрите Характеристики ордеров и правила проведения торговых операций в Учебнике.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
В общем хочу создать советника на основе нескольких индикторов. Вот что уже есть:
Теперь мои вопросы: как реализовать в моем советнике трейлинг стоп, т.к. из-за его отсутствия зачастую теряется прибыль?
Как сделать, чтобы советник открывал только один ордер для данной валютной пары при установке на нескольких валютах?