← К каталогу
Исходный код · ID 595

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 и перейдите к оплате.

Стоимость полного кода
1 420,10₽ ≈ $17.36