Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Что эта функция делает ясно всем?
int OpenSell(double volume,int slippage=10,string comment="Open Short EUR/USD (Sell)",int magic0=102406)
{
MqlTradeRequest my_trade;
MqlTradeResult my_trade_result;
my_trade.action=TRADE_ACTION_DEAL;
my_trade.symbol=Symbol();
my_trade.volume=NormalizeDouble(volume,1);
my_trade.price=NormalizeDouble(Bid,_Digits);
my_trade.sl=NormalizeDouble(Bid+StopLoss*_Point,_Digits);
my_trade.tp=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);
my_trade.deviation=slippage;
my_trade.type=ORDER_TYPE_SELL;
my_trade.type_filling=ORDER_FILLING_AON;
my_trade.comment=comment;
my_trade.magic=magic;
ResetLastError();
if(OrderSend(my_trade,my_trade_result))
{
time_oc=TimeLocal();
md=0;
Print("Код результата операции - ",my_trade_result.retcode);
}
else
{
Print("Код результата операции - ",my_trade_result.retcode);
Print("Ошибка открытия ордера = ",GetLastError());
}
return(0);
}
В процедуре OnTick()
...
OpenSell(Lots,10,"EUR/USD (Sell)",102406);
...
в самом начале:
double StopLoss=250,
TakeProfit=1400;
extern double Lots = 0.1;
Каким хреном -220$ в результатах теста?
<DATE> <BALANCE> <EQUITY> <MARGIN LEVEL>
01,01,2010 0:00:00 10000 10000 0
11,01,2010 2:57:00 9779,29 9841,92 6827
15,01,2010 16:00:00 9829,8 9941,9 6857
22,01,2010 14:32:00 10124,1 10135,9 7167
26,01,2010 2:14:00 10048,6 10048,6 0
26,01,2010 4:06:00 10048,6 10038,4 7099
27,01,2010 21:12:00 10188,5 10188,5 0
29,01,2010 2:16:00 10188,5 10308 7346
29,01,2010 7:14:00 10188,5 10277,4 7324
04,02,2010 22:05:00 10418,63 10480,83 7592
Если я ошибся, то ткните меня носом.
Этот советник я Вам так не дам весь посмотреть. Функция на Бай аналогичная...
Закрываю позицию встречным ордером.
Ладно. Раскричался я тут. Только изучаю язык. Если кого-то обидел - извиняюсь. Буду работать и искать проблему. Скорее всего я сам виноват, но очень хочется научиться делать качественных советников на mql5. Очень хорошая система, но ... пока проблемы у меня.
Хотя на mql4 пашут 20 советников без проблем.
...
Приступил помаленьку к изучению раздела "Файловые операции". Подскажите, есть ли обучающие статьи на тему работы с файлами в MQL5?
Как правильно удалить все ордера с определенным мэджиком?
У меня для этого исп. две функции, check_orders проверяет наличие ордеров с опр. меджиком, а remove_sl удаляет:
Проблема в том, что в журнале эксперта появляются вот такие строки:
2011.05.11 21:40:19 Trades '726238' : failed cancel order #4375237 buy 0.00 at 0.00000 [Invalid request]
т.е. идут лишние обращения на торговый сервер с запросом удаления ордера, запрос на удаление которого уже отправлялся.
По моему у меня проблема с закрытием и открытием позиции.
Каким-то образом вместо наличия позиции на 0.1 лот, я по факту имею несколько лотов. Видимо позиции по одному символу накладываются и объем позиции растет. Только так можно объяснить вышеуказанные проблемы с большими величинами стопов и большая разница при тестировании. Значит я не правильно провожу анализ наличия открытых сделок или не правильно закрываю следки.
Вот какую процедуру для определения наличия открытой позиции по символу я использую:
int Total()
{
count=0;
for (i=0; i<=PositionsTotal(); i++)
{
if (PositionGetSymbol(i)==_Symbol) {count++;}
}
return(count);
}
Ну естественно функция возвращает или 0 или 1.
Я использую следующую запись для открытия ордеров:
if (Total()<1)
{
if (#какая-то проверка по индикаторам#) OpenBuy(Lots,10,"EUR/USD (Buy)",102406);
if (#какая-то проверка по индикаторам#) OpenSell(Lots,10,"EUR/USD (Sell)",102406);
}
Открываю бай и селл похоже:
int OpenSell(double volume,int slippage=10,string comment="Open Short EUR/USD (Sell)",int magic0=102406)
{
MqlTradeRequest my_trade;
MqlTradeResult my_trade_result;
my_trade.action=TRADE_ACTION_DEAL;
my_trade.symbol=Symbol();
my_trade.volume=NormalizeDouble(volume,1);
my_trade.price=NormalizeDouble(Bid,_Digits);
my_trade.sl=NormalizeDouble(Bid+StopLoss*_Point,_Digits);
my_trade.tp=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);
my_trade.deviation=slippage;
my_trade.type=ORDER_TYPE_SELL;
my_trade.type_filling=ORDER_FILLING_AON;
my_trade.comment=comment;
my_trade.magic=magic;
ResetLastError();
if(OrderSend(my_trade,my_trade_result))
{
time_oc=TimeLocal();
md=0;
Print("Код результата операции - ",my_trade_result.retcode);
}
else
{
Print("Код результата операции - ",my_trade_result.retcode);
Print("Ошибка открытия ордера = ",GetLastError());
}
return(0);
}
Закрываю сделки в главной процедуре аналогично:
if (Total()>0) TryToClose();
ТрайТуКлоуз такая:
}
Проверка по индикатором такая - если должна быть позиция Бай, а существует Селл, то делаем Бай.
Где я ошибся. Почему я получаю укрупненные позиции.
Всталяйте код через кнопку SRC
Вы знаете различия между ордером МТ4 и ордером МТ5 ?В mql4 ордеры бывают торговыми или отложенными.
В mql5 ордер - это отложенная сделка. Вход в ранок - это уже открытие позиции. При срабатывании ордера происходит открытие позиции. Позиция по одному символу может быть одна, а ордеров сколько угодно.
Мне все какбЭ намекают на тупость. Пусть я тупой. Ну найдите у меня ошибки, чтобы я исправил.
Мне все какбЭ намекают на тупость. Пусть я тупой. Ну найдите у меня ошибки, чтобы я исправил.
Я ни на что не намекаю, просто пробегал мимо и спросил то, что чаще всего является причиной, я же не знаю ваш уровень подготовки.
Я тут давно, о многих уже сложил своё мнение (каждый силён в чем то своём), вас я пока не знаю, поэтому и намекать ни на что не собираюсь.
По тем кускам что приведены я не вижу общей картины стратегии. Судя по тому что вы перебираете позиции, стратегия мультивалютная.
Но вы зачем то прописали только один инструмент, если инструмент один то зачем циклом перебирать позиции?
ЗЫ Если вы знаете инструмент то для поиска позиции совсем не нужно перебирать все позиции, достаточно воспользоваться вот этой функцией: