![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Так,мне написали сделать два действия "extern int SL_POINTS = 50 ; // Стоп лосс в пунктах дальше нажимаете F3 и ищите вызов функции выставляющей ордера SendMarketOrder её третий параметр меняете с 0 на SL_POINTS" у вас я так понимаю это первое и четвертое действие в описании,а вот это "Еще стоит учесть StopLevel int stopLevel = (int)SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL)+1; И еще у нас есть стоимость пункта double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);" куда прописать ?
пока не заморачивайся :-) внутри функции MarketOrderOpen есть умножение на стоимость пункта.
сделай первые действия и посмотри что в тестере получается. А то запутаешься :-)
Maxim Kuznetsov ему сразу нужно понять основные значения, которыми придется оперировать в будущем по любому.
пока не заморачивайся :-) внутри функции MarketOrderOpen есть умножение на стоимость пункта.
сделай первые действия и посмотри что в тестере получается. А то запутаешься :-)
где в этих строках нужно вместо 0 поставить SL_POINTS?
void SendFirstOrder(int Signal, double Lots)
{
int Ticket,Error;
if((Signal == OP_BUY) || (Signal == OP_SELL))
{
if(Signal == OP_BUY)
{
if(Debug)Print("Выполнено условие BUY");
if(Debug) Print("Отправляем ордер");
Ticket = SendMarketOrder(Signal, Lots, 0, 0, MagicBuy, ExpertName, Error);
if(Ticket > 0)
if(OrderSelect(Ticket,SELECT_BY_TICKET))
ModifyOrder(OrderOpenPrice() + TakeProfit * Point);
}
пока не заморачивайся :-) внутри функции MarketOrderOpen есть умножение на стоимость пункта.
сделай первые действия и посмотри что в тестере получается. А то запутаешься :-)
Ticket = SendMarketOrder(Signal, Lots, 0, 0, MagicBuy, ExpertName, Error); if(Ticket > 0)
Ticket = SendMarketOrder(Signal, Lots, SL_POINTS, 0, MagicBuy, ExpertName, Error);
по памяти - в вашем советнике SendMarketOrder принимает(понимает) следующие параметры, по порядку:
Signal - направление сделки OP_BUY или OP_SELL
Lots - объём сделки в лотах
SL - стоп-лосс в пунктах (в оригинале был 0, а вы подставите значение из параметров советника SL_POINTS)
TP - тейк-профит в пунктах (по логике советника не используется )
Magic - маджик который будет задан тикету
ExpertName - имя эксперта, если память не изменяет это попадёт в комент ордера
Error - служит для возврата кода ошибки (если таковая возникнет)
Ticket = SendMarketOrder(Signal, Lots, 0, 0, MagicBuy, ExpertName, Error); if(Ticket > 0)
Да 4 параметр.
Ticket = SendMarketOrder(Signal, Lots, SL_POINTS, 0, MagicBuy, ExpertName, Error);
по памяти - в вашем советнике SendMarketOrder принимает(понимает) следующие параметры, по порядку:
Signal - направление сделки OP_BUY или OP_SELL
Lots - объём сделки в лотах
SL - стоп-лосс в пунктах (в оригинале был 0, а вы подставите значение из параметров советника SL_POINTS)
TP - тейк-профит в пунктах (по логике советника не используется )
Magic - маджик который будет задан тикету
ExpertName - имя эксперта, если память не изменяет это попадёт в комент ордера
Error - служит для возврата кода ошибки (если таковая возникнет)
что советнику не нравится? на что он просит обратить внимание?
что советнику не нравится? на что он просит обратить внимание?
Пока забей.
Пока забей.
что советнику не нравится? на что он просит обратить внимание?
код советника старый и выдаются предупреждения о том что потенциально может приводить к ошибкам:
- в какой-то функции нехватает return со значением.
- где-то локальные переменные имеют такие-же имена что и глобальные ( с какого-то рожна разрабы MQL считают что это плохо)
- коды возврата OrderSelect OrderClose надо проверять
это не критические ошибки - советник скомпилировался и работать будет, в тестере так тем более, но может в реальных условиях сглючить