Вопрос вот в чем, вроде элементарный, но ответа не знаю... Хочу сделать скрипт который будет выставлять ордера с указанным в нем SL и TP. Какие функции выставляют эти ордера или где это можно глянуть? В справке не нашел, литературы к сожалению тоже. Может у кого-то есть что-то подобное, или литература. Встречал похожие скрипты но в них выставляются отложенные ордера...
- Немедленное исполнение - Открытие и закрытие позиций - Торговля - MetaTrader 5 для Android
- Типы ордеров - Принципы трейдинга - Торговля - MetaTrader 5 для Android
- Типы ордеров - Принципы трейдинга - Торговля - MetaTrader 5 для iPhone
//+------------------------------------------------------------------+
//| order_buy.mq4 |
//| Copyright c 2004, Alexander Ivanov. |
//| mailto:alexander@indus.ru |
//+------------------------------------------------------------------+
//| Разрешите импорт функций из библиотек через: |
//| "Сервис -> Настройки -> Советники -> Разрешить импорт DLL" |
//+------------------------------------------------------------------+
#property copyright "Copyright c 2004, Alexander Ivanov."
#property link "mailto:alexander@indus.ru"
#property show_inputs
extern int MagicNumber = 0;
extern double Lots = 0.1;
extern int Stop_Loss = 50;
extern int Take_Profit = 50;
#include <WinUser32.mqh>
#include <stdlib.mqh>
#include <stderror.mqh>
//+------------------------------------------------------------------+
//| Указываем количество последних дней, на которых ищем минимум |
//| для установки стоплосса |
//+------------------------------------------------------------------+
int deinit()
{
//---- просто удалим свои линии стопов
ObjectDelete( "order_buy_Stop_Loss_Line");
ObjectDelete( "order_buy_Take_Profit_Line");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Основная функция скрипта |
//+------------------------------------------------------------------+
int start()
{
//---- расчет цен
double dMyPrice = Ask;
double dMyStopLoss = dMyPrice - Stop_Loss*Point;
double dMyTakeProfit = dMyPrice + Take_Profit*Point;
//---- выставим линии для визуального управления стопами
ObjectCreate( "order_buy_Stop_Loss_Line", OBJ_HLINE, 0, 0, dMyStopLoss, 0, 0, 0, 0 );
ObjectSet( "order_buy_Stop_Loss_Line", OBJPROP_COLOR, Red );
ObjectSetText( "order_buy_Stop_Loss_Line", "Stop_Loss_Line", 6, "Arial", Red );
ObjectCreate( "order_buy_Take_Profit_Line", OBJ_HLINE, 0, 0, dMyTakeProfit, 0, 0, 0, 0 );
ObjectSet( "order_buy_Take_Profit_Line", OBJPROP_COLOR, Lime );
ObjectSetText( "order_buy_Take_Profit_Line", "Take_Profit_Line", 6, "Arial", Lime );
//---- запросим подтверждение на отработку
string quest="Вы хотите купить "+DoubleToStr(Lots,2)+" "+Symbol()+" по цене Ask "+
DoubleToStr(dMyPrice,Digits)+" \n\n"+
"Переместите выставленные линии на необходимые уровни и нажмите ОК \n"+
"(красная линия - Stop Loss, зеленая - Take Profit)\n\n"+
"Нажмите Отмена чтобы отказаться от сделки";
if(MessageBoxA(0,quest,"Визуальная установка ордера на покупку",
MB_OKCANCEL | MB_ICONASTERISK | MB_TOPMOST)!=IDOK) return(-2);
//---- трейдер согласился, возьмем новые уровни стопов и обязательно проверим их!
dMyStopLoss =NormalizeDouble(ObjectGet( "order_buy_Stop_Loss_Line", OBJPROP_PRICE1),Digits);
dMyTakeProfit=NormalizeDouble(ObjectGet( "order_buy_Take_Profit_Line",OBJPROP_PRICE1),Digits);
if((dMyStopLoss>0 && dMyStopLoss>Ask) || (dMyTakeProfit>0 && dMyTakeProfit<Ask))
{
Print("Неправильно выставлены уровни Stop Loss и Take Profit!");
MessageBoxA(0,"Неправильно выставлены уровни Stop Loss и Take Profit! \n"+
"Операция отменена\n\n",
"Визуальная установка ордера на покупку",MB_OK | MB_ICONSTOP | MB_TOPMOST);
return(-3);
}
//---- выведем в лог сообщение об заявке
Print("buy ",DoubleToStr(Lots,2)," ",Symbol()," at ",DoubleToStr(dMyPrice,Digits),
"sl ",DoubleToStr(dMyStopLoss,Digits)," tp ",DoubleToStr(dMyTakeProfit,Digits));
//---- пробуем послать команду
int ticket=OrderSend(Symbol(),OP_BUY,Lots,dMyPrice,3,dMyStopLoss,dMyTakeProfit, "Ordered by \"order_buy\" script" ,MagicNumber,0,HotPink);
if(ticket>0) // все отлично - заявка прошла
{
//---- сразу же выведем в лог подтверждение
Print("#",ticket," buy ",DoubleToStr(Lots,2)," ",Symbol()," at ",
DoubleToStr(dMyPrice,Digits)," is done");
//---- покажем окно
if(MessageBoxA(0,"Ордер успешно исполнен \nРаспечатать его?",
"Визуальная установка ордера на покупку", MB_YESNO | MB_ICONASTERISK | MB_TOPMOST)==IDYES)
{
OrderPrint();
}
//---- все ок, выходим
return(0);
}
//---- тут все плохо - выведем в лог сообщение
int err=GetLastError();
Print("buy ",DoubleToStr(Lots,2)," ",Symbol()," at ",
DoubleToStr(dMyPrice,Digits)," failed [",ErrorDescription(err),"]");
//----покажем окно
MessageBoxA(0,ErrorDescription(err),
"Ошибка визуальной установки ордера", MB_OK | MB_ICONERROR | MB_TOPMOST);
return(-4);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| order_sell.mq4 |
//| Copyright c 2004, Alexander Ivanov. |
//| mailto:alexander@indus.ru |
//+------------------------------------------------------------------+
//| Разрешите импорт функций из библиотек через: |
//| "Сервис -> Настройки -> Советники -> Разрешить импорт DLL" |
//+------------------------------------------------------------------+
#property copyright "Copyright c 2004, Alexander Ivanov."
#property link "mailto:alexander@indus.ru"
#property show_inputs
extern int MagicNumber = 0;
extern double Lots = 0.1;
extern int Stop_Loss = 50;
extern int Take_Profit = 50;
#include <WinUser32.mqh>
#include <stdlib.mqh>
#include <stderror.mqh>
int deinit()
{
//---- просто удалим свои линии стопов
ObjectDelete( "order_sell_Stop_Loss_Line");
ObjectDelete( "order_sell_Take_Profit_Line");
//----
return(0);
}
int start()
{
//---- расчет цен
double dMyPrice = Bid;
double dMyStopLoss = dMyPrice + Stop_Loss*Point;
double dMyTakeProfit = dMyPrice - Take_Profit*Point;
//---- выставим линии для визуального управления стопами
ObjectCreate( "order_sell_Stop_Loss_Line", OBJ_HLINE, 0, 0, dMyStopLoss, 0, 0, 0, 0 );
ObjectSet( "order_sell_Stop_Loss_Line", OBJPROP_COLOR, Red );
ObjectSetText( "order_sell_Stop_Loss_Line", "Stop_Loss_Line", 6, "Arial", Red );
ObjectCreate( "order_sell_Take_Profit_Line", OBJ_HLINE, 0, 0, dMyTakeProfit, 0, 0, 0, 0 );
ObjectSet( "order_sell_Take_Profit_Line", OBJPROP_COLOR, Lime );
ObjectSetText( "order_sell_Take_Profit_Line", "Take_Profit_Line", 6, "Arial", Lime );
//---- запросим подтверждение на отработку
string quest="Вы хотите продать "+DoubleToStr(Lots,2)+" "+Symbol()+" по цене Bid "+
DoubleToStr(dMyPrice,Digits)+" \n\n"+
"Переместите выставленные линии на необходимые уровни и нажмите ОК \n"+
"(красная линия - Stop Loss, зеленая - Take Profit)\n\n"+
"Нажмите Отмена чтобы отказаться от сделки";
if(MessageBoxA(0,quest,"Визуальная установка ордера на продажу",
MB_OKCANCEL | MB_ICONASTERISK | MB_TOPMOST)!=IDOK) return(-2);
//---- трейдер согласился, возьмем новые уровни стопов и обязательно проверим их!
dMyStopLoss =NormalizeDouble(ObjectGet( "order_sell_Stop_Loss_Line", OBJPROP_PRICE1),Digits);
dMyTakeProfit=NormalizeDouble(ObjectGet( "order_sell_Take_Profit_Line",OBJPROP_PRICE1),Digits);
if((dMyStopLoss>0 && dMyStopLoss<Bid) || (dMyTakeProfit>0 && dMyTakeProfit>Bid))
{
Print("Неправильно выставлены уровни Stop Loss и Take Profit!");
MessageBoxA(0,"Неправильно выставлены уровни Stop Loss и Take Profit! \n"+
"Операция отменена\n\n",
"Визуальная установка ордера на продажу",MB_OK | MB_ICONSTOP | MB_TOPMOST);
return(-3);
}
//---- выведем в лог сообщение об заявке
Print("sell ",DoubleToStr(Lots,2)," ",Symbol()," at ",DoubleToStr(dMyPrice,Digits),
"sl ",DoubleToStr(dMyStopLoss,Digits)," tp ",DoubleToStr(dMyTakeProfit,Digits));
//---- пробуем послать команду
int ticket=OrderSend(Symbol(),OP_SELL,Lots,dMyPrice,3,dMyStopLoss,dMyTakeProfit, "Ordered by \"order_sell\" script" ,MagicNumber,0,HotPink);
if(ticket>0) // все отлично - заявка прошла
{
//---- сразу же выведем в лог подтверждение
Print("#",ticket," sell ",DoubleToStr(Lots,2)," ",Symbol()," at ",
DoubleToStr(dMyPrice,Digits)," is done");
//---- покажем окно
if(MessageBoxA(0,"Ордер успешно исполнен \nРаспечатать его?",
"Визуальная установка ордера на продажу", MB_YESNO | MB_ICONASTERISK | MB_TOPMOST)==IDYES)
{
OrderPrint();
}
//---- все ок, выходим
return(0);
}
//---- тут все плохо - выведем в лог сообщение
int err=GetLastError();
Print("sell ",DoubleToStr(Lots,2)," ",Symbol()," at ",
DoubleToStr(dMyPrice,Digits)," failed [",ErrorDescription(err),"]");
//----покажем окно
MessageBoxA(0,ErrorDescription(err),
"Ошибка визуальной установки ордера", MB_OK | MB_ICONERROR | MB_TOPMOST);
return(-4);
}
//+------------------------------------------------------------------+
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь