send_pending_order.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «send_pending_order.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой торговый советник для MetaTrader 4, предназначенный для размещения отложенных ордеров через визуальный интерфейс. Пользователь задаёт уровень цены, перетаскивая горизонтальную линию на графике, после чего советник автоматически рассчитывает уровни Стоп-Лосса и Тейк-Профита на заданном расстоянии в пунктах.
Советник поддерживает типы отложенных ордеров BUYSTOP, BUYLIMIT, SELLSTOP и SELLLIMIT. Перед отправкой ордера выполняется проверка расстояний до минимального допустимого уровня (MODE_STOPLEVEL), и при нарушении условий пользователю выводится предупреждение. Также доступна настройка времени истечения ордера в минутах или часах.
На графике отображается графический селектор объёма сделки, позволяющий выбрать лот визуально. После успешной валидации всех параметров советник отправляет отложенный ордер через торговый API MetaTrader 4. В случае ошибки отображается сообщение с описанием проблемы.
Настройки программы
| Настройка | Описание |
|---|---|
| ( "1" - BUYSTOP ??? BUYLIMIT, "-1" - SELLSTOP ??? SELLLIMIT ) (_OrderType) | Тип ордера — Тип отложенного ордера: 1 — BUYSTOP или BUYLIMIT, -1 — SELLSTOP или SELLLIMIT. Конкретный тип определяется автоматически на основе соотношения заданных уровней цены и стоп-лосса. |
| Lots | Объём лота — Объём лота для отложенного ордера. Допустимые значения от 0.1 до 10.0 с шагом 0.1 и более. |
| Stop_Loss | Стоп-Лосс (пункты) — Расстояние до уровня Стоп-Лосса от цены открытия, измеряемое в пунктах. |
| Take_Profit | Тейк-Профит (пункты) — Расстояние до уровня Тейк-Профита от цены открытия, измеряемое в пунктах. При значении 0 Тейк-Профит не задаётся. |
| Slippage | Проскальзывание — Допустимое отклонение цены исполнения от запрашиваемой цены (в пунктах). |
| _Comment | Комментарий — Текстовый комментарий, присоединяемый к отложенному ордеру. |
| MagicNumber | Магический номер — Магический номер для идентификации ордеров, отправленных данным советником. |
| Expiration_Shift | Сдвиг истечения (минуты) — Сдвиг времени истечения ордера в минутах относительно текущего времени. При значении 0 истечение не задаётся. |
| Expiration_Shift_H | Сдвиг истечения (часы) — Сдвиг времени истечения ордера в часах относительно текущего времени. Используется, если Expiration_Shift равен 0. При значении 0 истечение не задаётся. |
| Order_Color | Цвет ордера — Общий цвет ордера (параметр-алиас для пользовательской настройки). |
| ( ??? ??????? BUYSTOP ? BUYLIMIT ) (Buy_Color) | Цвет покупки — Цвет отображения линий и меток для отложенных ордеров на покупку (BUYSTOP и BUYLIMIT). |
| ( ??? ??????? SELLLIMIT ? SELLSTOP ) (Sell_Color) | Цвет продажи — Цвет отображения линий и меток для отложенных ордеров на продажу (SELLSTOP и SELLLIMIT). |
| Line_Color | Цвет линий — Общий цвет линий отображения на графике (параметр-алиас для пользовательской настройки). |
| Open_Price_Line_Color | Цвет линии открытия цены — Цвет горизонтальной линии, обозначающей уровень открытия цены на графике. |
| Stop_Loss_Line_Color | Цвет линии стоп-лосса — Цвет горизонтальной линии уровня Стоп-Лосса на графике. |
| Take_Profit_Line_Color | Цвет линии тейк-профита — Цвет горизонтальной линии уровня Тейк-Профита на графике. |
| Expiration_Line_Color | Цвет линии истечения — Цвет вертикальной линии, обозначающей время истечения отложенного ордера на графике. |
Поиск по коду файла
/*
-----------------------------?-?-?-?-?-?-?-?---------------------------------
????? ???????? ??????? ???????????? ?????????? ??????? ????????? ???????????:
?????? ???????????? ??? ????????? ??????????? ??????.
??? ????? ??????????:
1) ???????????? ? ?????? ???????????? =), !?????????? ???????? ?? ?????????! (????????? ??? ?????????,
?????????? ? ????????????? ??????? //+----------------------------------------------+ ),
????????? ?????? ??????? ????????? ????? ????
"??????" -> "?????????" -> "?????????" -> "????????? ?????????????? ??????? ?????????"
(?????????? ??? ???????? ??????, ??????? ????? ?????????? ??? ????????? ??????)
2) ?????????? ?????? ?? ??????. ??? ???? ?????????, ??? ????? ???????????? - ??? ???????
???? ???????? (OpenPrice). ? ???????? ????????? ? ????? ????? ??????, ?? ??? ?????????
?????? ?????????? ????????????? ?????? ????? ?? ?????? ???????.
3) ??????????? ??? ????? ?? ??????????? ??????:
- Open_Price_Line (?? ????????? - ?????) - ???? ???????? (???????????? ?????)
- Stop_Loss_Line (???????) - ??????? ???? ???? (????????????)
- Take_Profit_Line (??????) - ??????? ???? ?????? (??????????????)
- Expiration_Line (?????) - ????? ????????? (??????????????)
(?????????????? ????? ????? ???????)
- "````" - ?????? ???????. ?????????? ?????????? ???????? ??????? ???????? (?? 0,1 ?? 10 ?????)
? ??????????? ?? ???????????? ????? Open_Price ? Stop_Loss ?????????? ??? ??????:
Open_Price > Bid ? Open_Price > Stop_Loss - BUYSTOP-?????,
Open_Price > Bid ? Open_Price < Stop_Loss - SELLLIMIT-?????,
Open_Price < Ask ? Open_Price > Stop_Loss - BUYLIMIT-?????,
Open_Price < Ask ? Open_Price < Stop_Loss - SELLSTOP-?????.
4) ????? ?? ????? ??????, ? ??????????? ???? ?????? ?????? "??".
??? ??????????? ?????? ??????? ? ????? ?????? ????? ??????????????? ??????? "??????".
???? ???? ????? ??????? ?????? ? ????, ??? ? ?????? ?????? ???????, ??????? ???????? ?? k**********s*@mail.ru
*/
#property show_inputs
extern int _OrderType = 1; //( "1" - BUYSTOP ??? BUYLIMIT, "-1" - SELLSTOP ??? SELLLIMIT )
extern double Lots = 0.1;
extern int Stop_Loss = 50;
extern int Take_Profit = 50;
extern int Slippage = 5;
extern string _Comment = "Opened by script";
extern int MagicNumber = 0;
extern int Expiration_Shift = 0;
extern int Expiration_Shift_H = 0;
extern string Order_Color = "----------------------------------------------------------------------------------------";
extern color Buy_Color = Lime; //( ??? ??????? BUYSTOP ? BUYLIMIT )
extern color Sell_Color = Red; //( ??? ??????? SELLLIMIT ? SELLSTOP )
extern string Line_Color = "----------------------------------------------------------------------------------------";
extern color Open_Price_Line_Color = White;
extern color Stop_Loss_Line_Color = Red;
extern color Take_Profit_Line_Color = Lime;
extern color Expiration_Line_Color = Yellow;
#include <stdlib.mqh>
int first = 1;
int start()
{
// код доступен только после оплаты
}
double Open_Price_Level, Stop_Loss_Level, Take_Profit_Level;
datetime Expiration_Time;
Open_Price_Level = PriceOnDropped();
if ( Open_Price_Level <= 0 )
{ Open_Price_Level = Bid + MarketInfo( Symbol(), MODE_STOPLEVEL )*Point; }
Stop_Loss_Level = Open_Price_Level - Stop_Loss * Point;
if ( Take_Profit > 0 )
{ Take_Profit_Level = Open_Price_Level + Take_Profit * Point; }
if ( _OrderType == -1 )
{
Open_Price_Level = PriceOnDropped();
if ( Open_Price_Level <= 0 )
{ Open_Price_Level = Ask - MarketInfo( Symbol(), MODE_STOPLEVEL )*Point; }
Stop_Loss_Level = Open_Price_Level + Stop_Loss * Point;
if ( Take_Profit > 0 )
{ Take_Profit_Level = Open_Price_Level - Take_Profit * Point; }
}
if ( Expiration_Shift > 0 )
{ Expiration_Time = CurTime() + Period()*60*Expiration_Shift; }
else
{
if ( Expiration_Shift_H > 0 )
{ Expiration_Time = CurTime() + 3600*Expiration_Shift_H; }
}
if ( first == 1 )
{
ObjectCreate( "Open_Price_Line", OBJ_HLINE, 0, 0, Open_Price_Level, 0, 0, 0, 0 );
ObjectSet( "Open_Price_Line", OBJPROP_COLOR, Open_Price_Line_Color );
ObjectSetText( "Open_Price_Line", "Open_Price_Line", 6, "Arial", Open_Price_Line_Color );
ObjectCreate( "Stop_Loss_Line", OBJ_HLINE, 0, 0, Stop_Loss_Level, 0, 0, 0, 0 );
ObjectSet( "Stop_Loss_Line", OBJPROP_COLOR, Stop_Loss_Line_Color );
ObjectSetText( "Stop_Loss_Line", "Stop_Loss_Line", 6, "Arial", Stop_Loss_Line_Color );
if ( Take_Profit_Level > 0 )
{
ObjectCreate( "Take_Profit_Line", OBJ_HLINE, 0, 0, Take_Profit_Level, 0, 0, 0, 0 );
ObjectSet( "Take_Profit_Line", OBJPROP_COLOR, Take_Profit_Line_Color );
ObjectSetText( "Take_Profit_Line", "Take_Profit_Line", 6, "Arial", Take_Profit_Line_Color );
}
if ( Expiration_Time > 0 )
{
ObjectCreate( "Expiration_Line", OBJ_VLINE, 0, Expiration_Time, 0, 0, 0, 0, 0 );
ObjectSet( "Expiration_Line", OBJPROP_COLOR, Expiration_Line_Color );
ObjectSetText( "Expiration_Line", "Expiration_Line", 6, "Arial", Expiration_Line_Color );
}
int Lots_value_y = 30;
switch ( Lots )
{
case 0.2: Lots_value_y = 45; break;
case 0.3: Lots_value_y = 60; break;
case 0.4: Lots_value_y = 75; break;
case 0.5: Lots_value_y = 90; break;
case 0.6: Lots_value_y = 105; break;
case 0.7: Lots_value_y = 120; break;
case 0.8: Lots_value_y = 135; break;
case 0.9: Lots_value_y = 150; break;
case 1.0: Lots_value_y = 165; break;
case 2.0: Lots_value_y = 180; break;
case 3.0: Lots_value_y = 195; break;
case 4.0: Lots_value_y = 210; break;
case 5.0: Lots_value_y = 225; break;
case 6.0: Lots_value_y = 240; break;
case 7.0: Lots_value_y = 255; break;
case 8.0: Lots_value_y = 270; break;
case 9.0: Lots_value_y = 285; break;
case 10.0: Lots_value_y = 300; break;
}
if ( Lots > 10.0 ) Lots_value_y = 315;
int Lots_value_y_start_position = Lots_value_y;
ObjectCreate( "Lots", OBJ_LABEL, 0,0,0,0,0,0,0);
ObjectSet( "Lots", OBJPROP_CORNER, 1);
ObjectSet( "Lots", OBJPROP_XDISTANCE, 1);
ObjectSet( "Lots", OBJPROP_YDISTANCE, 10);
ObjectSetText( "Lots", "Lots", 10, "Arial", Open_Price_Line_Color);
ObjectCreate( "Lots_value", OBJ_LABEL, 0,0,0,0,0,0,0);
ObjectSet( "Lots_value", OBJPROP_CORNER, 1);
ObjectSet( "Lots_value", OBJPROP_XDISTANCE, 25);
ObjectSet( "Lots_value", OBJPROP_YDISTANCE, Lots_value_y);
ObjectSetText( "Lots_value", "`````", 10, "Arial", Open_Price_Line_Color);
int y = 25;
for ( double z = 0.1; z <= 1; z += 0.1 )
{
ObjectCreate( DoubleToStr( z, 1 ), OBJ_LABEL, 0,0,0,0,0,0,0);
ObjectSet( DoubleToStr( z, 1 ), OBJPROP_CORNER, 1);
ObjectSet( DoubleToStr( z, 1 ), OBJPROP_XDISTANCE, 1);
ObjectSet( DoubleToStr( z, 1 ), OBJPROP_YDISTANCE, y);
ObjectSetText( DoubleToStr( z, 1 ), DoubleToStr( z, 1 ), 10, "Arial", Open_Price_Line_Color);
y += 15;
}
y = 160;
for ( z = 1; z <= 10; z ++ )
{
ObjectCreate( DoubleToStr( z, 1 ), OBJ_LABEL, 0,0,0,0,0,0,0);
ObjectSet( DoubleToStr( z, 1 ), OBJPROP_CORNER, 1);
ObjectSet( DoubleToStr( z, 1 ), OBJPROP_XDISTANCE, 1);
ObjectSet( DoubleToStr( z, 1 ), OBJPROP_YDISTANCE, y);
ObjectSetText( DoubleToStr( z, 1 ), DoubleToStr( z, 1 ), 10, "Arial", Open_Price_Line_Color);
y += 15;
}
ObjectCreate( ">", OBJ_LABEL, 0,0,0,0,0,0,0);
ObjectSet( ">", OBJPROP_CORNER, 1);
ObjectSet( ">", OBJPROP_XDISTANCE, 1);
ObjectSet( ">", OBJPROP_YDISTANCE, 310);
ObjectSetText( ">", ">10", 10, "Arial", Open_Price_Line_Color);
string Question = "??? ????????? ?????? ??????????? ????? ?? ??????????? ?????? ? ??????? \"??\".\n" +
"???? ?????????? ?? ?????????, ??????? \"??????\".";
int Answer = MessageBox( Question, "????????? ??????????? ??????", 0x00000001 | 0x00000040 | 0x00040000 );
first = 0;
if ( Answer != 1 ) { deinit(); return(0); }
}
Lots_value_y = ObjectGet( "Lots_value", OBJPROP_YDISTANCE );
if ( Lots_value_y_start_position != Lots_value_y )
{
Lots = 0.1;
if ( Lots_value_y >= 35 && Lots_value_y < 50 ) Lots = 0.2;
if ( Lots_value_y >= 50 && Lots_value_y < 65 ) Lots = 0.3;
if ( Lots_value_y >= 65 && Lots_value_y < 80 ) Lots = 0.4;
if ( Lots_value_y >= 80 && Lots_value_y < 95 ) Lots = 0.5;
if ( Lots_value_y >= 95 && Lots_value_y < 110 ) Lots = 0.6;
if ( Lots_value_y >= 110 && Lots_value_y < 125 ) Lots = 0.7;
if ( Lots_value_y >= 125 && Lots_value_y < 140 ) Lots = 0.8;
if ( Lots_value_y >= 140 && Lots_value_y < 155 ) Lots = 0.9;
if ( Lots_value_y >= 155 && Lots_value_y < 170 ) Lots = 1.0;
if ( Lots_value_y >= 170 && Lots_value_y < 185 ) Lots = 2.0;
if ( Lots_value_y >= 185 && Lots_value_y < 200 ) Lots = 3.0;
if ( Lots_value_y >= 200 && Lots_value_y < 215 ) Lots = 4.0;
if ( Lots_value_y >= 215 && Lots_value_y < 230 ) Lots = 5.0;
if ( Lots_value_y >= 230 && Lots_value_y < 245 ) Lots = 6.0;
if ( Lots_value_y >= 245 && Lots_value_y < 260 ) Lots = 7.0;
if ( Lots_value_y >= 260 && Lots_value_y < 275 ) Lots = 8.0;
if ( Lots_value_y >= 275 && Lots_value_y < 290 ) Lots = 9.0;
if ( Lots_value_y >= 290 ) Lots = 10.0;
}
Lots = NormalizeDouble( Lots, 1 );
Open_PrПоказано первые 50% кода (символов: 14201)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.