VR --- STEALS-3
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «vr---steals-3-en.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
VR --- STEALS-3 — это советник для MetaTrader 4, предназначенный для управления открытыми ордерами посредством виртуальных (невидимых) уровней StopLoss, TakeProfit, Breakeven и Trailing Stop. Он работает как «невидимый советник», размещая на графике графические маркеры для отслеживания этих уровней без отображения традиционных стоп-лоссов и тейк-профитов непосредственно на ордерах. Советник предоставляет графический интерфейс с кнопками на графике для открытия различных типов ордеров (Buy, Sell, Buy Limit, Sell Limit, Buy Stop, Sell Stop), а также для управления существующими позициями: закрытие, удаление, установка SL/TP, безубытка, трейлинг-стоп и ограничения по времени. На графике отображаются информационные сообщения о результатах операций. Советник поддерживает как демо-, так и реальные счета, содержит обнаружение оптимизации и тестирования, а также использует настраиваемую задержку цикла для снижения нагрузки на процессор. Обработка рыночных событий осуществляется через OnTick, торговые операции выполняются через OrderSend.
Настройки программы
| Настройка | Описание |
|---|---|
| StartLot | Начальный лот — Начальный объём лота для открытия ордеров |
| TakeProfit | Тейк-профит — Начальный уровень тейк-профита в пунктах |
| StopLoss | Стоп-лосс — Начальный уровень стоп-лосса в пунктах |
| TralingStop | Трейлинг-стоп — Начальный уровень трейлинг-стопа в пунктах |
| Breakeven | Безубыток — Начальный уровень безубытка в пунктах |
| prefix | Префикс объектов — Префикс имён графических объектов советника на графике |
| Magic | Магический номер — Уникальный номер магического поля советника для идентификации управляемых ордеров |
| Slip | Проскальзывание — Допустимое проскальзывание в пунктах при выполнении торговых операций |
| MilSec | Задержка цикла — Циклическая задержка в миллисекундах между итерациями для снижения нагрузки на процессор |
Поиск по коду файла
#property description " Invisible Counselor , allows to put not visible"
#property description "StopLoss, TakeProfit, Breakeven, Traling stop, OrderClose, OrderDelete"
#property strict
/*
WARNING !
ADVISOR operate even when the terminal MT4 bild 610 or Up
Advisor is designed for installation of virtual StopLoss, TakeProfit, Breakeven, Traling stop, OrderClose, OrderDelete
This is the third version of the Advisor VR --- STEALS
The first version builds 509 or below
The second version builds 509 or below
Since writing the first version has been more than three years , this version incorporates many requests
Traders using earlier versions of the advisor.
Copyright Adviser Voldemar. Skype: Voldemar227
System requirements:
MT4 build above 610
*/
input double StartLot = 0.01;
input int TakeProfit = 500 ;
input int StopLoss = 500 ;
input int TralingStop = 300 ;
input int Breakeven = 300 ;
input string prefix = "vr";
input int Magic = 0 ;
input int Slip = 30 ;
input int MilSec = 100 ;
string info []; // Array for messages on the chart
int Coment = 10; // Number of messages on the chart
color cvit []; // Array of colors for messages on the chart
int ButX = 17 ; // X coordinate of the buttons Adviser
int BuyY = 15 ; // Y coordinate of the buttons Adviser
int x = 0, // x coordinate of the buttons Adviser
y = 0 ; // Y coordinate of the buttons Adviser
double tp = 0, // Variable to take profit
sl = 0, // Variable for Stop Loss
tr = 0, // Variable for Trailing Stop
br = 0 ; // Variable for breakeven
double wlot = 0 ; // Variable for your status
int OnInit ()
{
// код доступен только после оплаты
}
void OnTick ()
{
// код доступен только после оплаты
}
void worc ()
{
but (); // This function creates a button Hidden Charm orders and lots of choice
for (int i = OrdersTotal () -1; i>= 0 ; i--) // looping through the orders
if (OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) // Parse warrants parts
if (OrderMagicNumber () == Magic || Magic == -1) // Check for Meydzhik room
if (OrderSymbol () == _Symbol) // Check for character trades
{
x = y = 0 ; // Reset variables
ChartTimePriceToXY (0,0, (OrderOpenTime ()), OrderOpenPrice (), x, y); // Find the coordinates in pixels from the opening price and the opening time of the order
button (StringConcatenate ("Sl", OrderTicket ()), x- 100 , y, "Sl", "StopLoss", ButX, BuyY); // Create button stop loss
button (StringConcatenate ("Tp", OrderTicket ()), x- 80 , y, "Tp", "TakeProfit", ButX, BuyY); // Create a button take profit
button (StringConcatenate ("Br", OrderTicket ()), x- 60 , y, "Br", "Breakeven", ButX, BuyY); // Create button bezubytka
button (StringConcatenate ("Tr", OrderTicket ()), x- 40 , y, "Tr", "Ttrailing Stop", ButX, BuyY); // Create button trailing stop
button (StringConcatenate ("Ti", OrderTicket ()), x- 20 , y, "Ti", "Time Close", ButX, BuyY); // Create a button for the lifetime of the order
button (StringConcatenate ("X", OrderTicket ()), x, y, "X", "Close Order", ButX, BuyY); // Create a button closure / removal orders
}
for (int i = ObjectsTotal () -1; i>= 0 ; i--) // looping through the objects
if (ObjectType (ObjectName (i)) == OBJ_BUTTON) // If the object fell button
if (but_stat (ObjectName (i)) == true) // If the button is pressed
ObjectSetInteger ( 0 , ObjectName (i), OBJPROP_BGCOLOR, clrLightGreen); // Repaint the green
else
ObjectSetInteger ( 0 , ObjectName (i), OBJPROP_BGCOLOR, C'230, 230,230 '); // If the button is pressed the button will return the native color
for (int i = OrdersTotal () -1; i>= 0 ; i--) // looping through the orders
if (OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) // Parse warrants parts
if (OrderMagicNumber () == Magic || Magic == -1) // Check for Meydzhik room
if (OrderSymbol () == _Symbol) // Check for character trades
{
if (but_stat (StringConcatenate (prefix, "X", OrderTicket ())) == true) // If pressed X
closeorders (OrderTicket ()); // Close the order or remove
if (OrderType () == 0 || OrderType () == 2 || OrderType () == 4) // Work with warrants to purchase
{
if (but_stat (StringConcatenate (prefix, "Tp", OrderTicket ())) == true) // If pressed take profit
obj_cre (StringConcatenate ("tp", OrderTicket ()), (Ask + tp), clrGreen); // Create a graphic label
else
obj_del (StringConcatenate ("tp", OrderTicket ())); // If the button is pressed delete object
if (but_stat (StringConcatenate (prefix, "Sl", OrderTicket ())) == true) // If the button is pressed the stop loss
obj_cre (StringConcatenate ("sl", OrderTicket ()), (Bid-sl), clrRed); // Create a graphic label
else
obj_del (StringConcatenate ("sl", OrderTicket ())); // If the button is pressed delete object
}
if (OrderType () == 1 || OrderType () == 3 || OrderType () == 5) // We work with sell orders
{
if (but_stat (StringConcatenate (prefix, "Tp", OrderTicket ())) == true) // If pressed take profit
obj_cre (StringConcatenate ("tp", OrderTicket ()), (Bid-tp), clrGreen); // Create a graphic label
else
obj_del (StringConcatenate ("tp", OrderTicket ())); // If the button is pressed delete object
if (but_stat (StringConcatenate (prefix, "Sl", OrderTicket ())) == true) // If the button is pressed the stop loss
obj_cre (StringConcatenate ("sl", OrderTicket ()), (Ask + sl), clrRed); // Create a graphic label
else
obj_del (StringConcatenate ("sl", OrderTicket ())); // If the button is pressed delete object
}
if (but_stat (StringConcatenate (prefix, "Br", OrderTicket ())) == true) // If pressed bezubytka
{
if (((Ask-br)> OrderOpenPrice ()) && OrderType () == 0) // If the order to buy and the price is above a predetermined level
obj_cre (StringConcatenate ("br", OrderTicket ()), (OrderOpenPrice ()), clrGreen); // Create a graphic label
if (((Bid + br) <OrderOpenPrice ()) && OrderType () == 1 ) // If an order to sell and the price is below a predetermined level
obj_cre (StringConcatenate ("br", OrderTicket ()), (OrderOpenPrice ()), clrGreen); // Create a graphic label
}
else obj_del (StringConcatenate ("br", OrderTicket ())); // If the button is pressed delete object
if (but_stat (StringConcatenate (prefix, "Tr", OrderTicket ())) == true) // If pressed trailing stop
{
if (((Ask-tr)> OrderOpenPrice ()) && OrderType () == 0) // If the order to buy and the price is above a predetermined level
obj_cre (StringConcatenate ("tr", OrderTicket ()), (OrderOpenPrice ()), clrGreen); // Create a graphic label
if (((Bid + tr) <OrderOpenPrice ()) && OrderType () == 1 ) // If an order to sell and the price is below a predetermined level
obj_cre (StringConcatenate ("tr", OrderTicket ()), (OrderOpenPrice ()), clrGreen); // Create a graphic label
}
else obj_del (StringConcatenate ("tr", OrderTicket ())); // If the button is pressed delete object
if (but_stat (StringConcatenate (prefix, "Ti", OrderTicket ())) == true) // If pressed lifetime warrant
obj_cre_v_line (StringConcatenate ("ti", OrderTicket ()), clrGreen); // Create a vertical line
else
obj_del (StringConcatenate ("ti", OrderTicket ())); // If the button is pressed delete object
}
his_del_obj (); // Remove obktov when closing orders
proverca_sl_tp_ti (); // Check for the conditions on stop loss, take profit of , time
proverca_br_tr (); // Check for the conditions on bezubytka , Trailing Stop
}
bool proverca_br_tr ()
{
for (int i = OrdersTotal () -1; i>= 0 ; i--) // looping through the orders
if (OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) // Parse warrants parts
if (OrderMagicNumber () == Magic || Magic == -1) // Check for Meydzhik room
if (OrderSymbol () == _Symbol) // Check for character trades
{
if (OrderType () == 0) // If the order Bai
{
if (ObjectFind (StringConcatenate ("br", OrderTicket ())) == 0) // If the object is created and the conditions are met
if (Bid <= get_object (StringConcatenate ("br", OrderTicket ()))) // If the price returned beyond Object
if (OrderClose (OrderTicket (), OrderLots (), Bid, Slip, clrRed) == true) // Close the order at bezubytka
pr ("Order close Ok!!!"); // If successful, we will report on the chart
else
pr ("Order close Error!!!" + Error (GetLastError ()), clrRed); // If it fails, return an error message
}
if (OrderType () == 1) // If the order Cell
{
if (ObjectFind (StringConcatenate ("br", OrderTicket ())) == 0) // If the object is created and the conditions are met
if (Ask>= get_object (StringConcatenate ("br", OrderTicket ()))) // If the price returned beyond Object
if (OrderClose (OrderTicket (), OrderLots (), Ask, Slip, clrRed) == true) // Close the order at bezubytka
pr ("Order close Ok!!!"); // If successful, we will report on the chart
else
pr ("Order close Error!!!" + Error (GetLastError ()), clrRed); // If it fails, return an error message
}
if (OrderType () == 0) // If the order Bai
{
if (ObjectFind (StringConcatenate ("tr", OrderTicket ())) == 0) // If the object is created and the conditions are met
{
if ((Bid-tr)> get_object (StringConcatenate ("tr", OrderTicket ()))) // If the price rises
set_object (StringConcatenate ("tr", OrderTicket ()), (Ask-tr)); // Move obkt trailing stop
if (Bid <= get_object (StringConcatenate ("tr", OrderTicket ()))) // If the price returned beyond Object
if (OrderClose (OrderTicket (), OrderLots (), Bid, Slip, clrRed) == true) // Close the trailing stop order
pr ("Order close Ok!!!"); // If successful, we will report on the chart
else
pr ("Order close Error!!!" + Error (GetLastError ()), clrRed); // If it fails, return an error message
}
}
if (OrderType () == 1) // If the order Cell
{
if (ObjectFind (StringConcatenate ("tr", OrderTicket ())) == 0) // If the object is created and the conditions are met
{
if ((Ask + tr) <get_object (StringConcatenate ("tr", OrderTicket ()))) // If the price falls
set_object (StringConcatenate ("tr", OrderTicket ()), (Bid + tr)); // Move obkt trailing stop
if (Ask>= get_object (StringConcatenate ("tr", OrderTicket ()))) // If the price returned beyond Object
if (OrderClose (OrderTicket (), OrderLots (), Ask, Slip, clrRed) == true) // Close the trailing stop order
pr ("Order close Ok!!!"); // If successful, we will report on the chart
else
pr ("Order close Error!!!" + Error (GetLastError ()), clrRed); // If it fails, return an error message
}
}
}
return false;
}
bool set_object (string name, double pri)
{
return ObjectSetDouble ( 0 , name, OBJPROP_PRICE, pri); // Function moves the object by name, and the new price
}
bool proverca_sl_tp_ti ()
{
for (int i = OrdersTotal () -1; i>= 0 ; i--) // Iterate orders
if (OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) // Parse warrant component parts
if (OrderMagicNumber () == Magic || Magic == -1) // if our Magic
if (OrderSymbol () == _Symbol) // if our character
{
if (OrderType () == 0) // If the order Bai
{
if (ObjectFind (StringConcatenate ("tp", OrderTicket ())) == 0) // If the object is created and the conditions are met
if (Bid> get_object (StringConcatenate ("tp", OrderTicket ()))) // If the price is above the object takeprofit
if (OrderClose (OrderTicket (), OrderLots (), Bid, Slip, clrRed) == true) // Close the order
pr ("Order close Ok!!!"); // If successful, we will report on the chart
else
pr ("Order close Error!!!" + Error (GetLastError ()), clrRed); // If it fails, return an error message
if (ObjectFind (StringConcatenate ("sl", OrderTicket ())) == 0) // If the object is created and the conditions are met
if (Bid <get_object (StringConcatenate ("sl", OrderTicket ()))) // If the price is below the stop loss Object
if (OrderClose (OrderTicket (), OrderLots (), Bid, Slip, clrRed) == true) // Close the order
pr ("Order close Ok!!!"); // If successful, we will report on the chart
else
pr ("Order close Error!!!" + Error (GetLastError ()), clrRed); // If it fails, return an error message
if (ObjectFind (StringConcatenate ("ti", OrderTicket ())) == 0) // If the object is created and the conditions are met
if ((int) TimeCurrent ()> (int) get_object_ti (StringConcatenate ("ti", OrderTicket ()))) // If the time is longer warrant Object Life
if (OrderClose (OrderTicket (), OrderLots (), Bid, Slip, clrRed) == true) // Close the order
pr ("Order close Ok!!!"); // If successful, we will report on the chart
else
pr ("Order close Error!!!" + Error (GetLastError ()), clrRed); // If it fails, return an error message
}
if (OrderType () == 1)
{
if (ObjectFind (StringConcatenate ("tp", OrderTicket ())) == 0) // If the object is created and the conditions are met
if (Ask <get_object (StringConcatenate ("tp", OrderTicket ()))) // If the price is below the object takeprofit
if (OrderClose (OrderTicket (), OrderLots (), Ask, Slip, clrRed) == true) // Close the order
pr ("Order close Ok!!!"); // If successful, we will report on the chart
else
pr ("Order close Error!!!" + Error (GetLastError ()), clrRed); // If it fails, return an error message
if (ObjectFind (StringConcatenate ("sl", OrderTicket ())) == 0) // If the object is created and the conditions are met
if (Ask> get_object (StringConcatenate ("sl", OrderTicket ()))) // If the price is above the object stop loss
if (OrderClose (OrderTicket (), OrderLots (), Ask, Slip, clrRed) == true) // Close the order
pr ("Order close Ok!!!"); // If successful, we will report on the chart
else
pr ("Order close Error!!!" + Error (GetLastError ()), clrRed); // If it fails, return an error message
if (ObjectFind (StringConcatenate ("ti", OrderTicket ())) == 0) // If the object is created and the conditions are met
if ((int) TimeCurrent ()> (int) get_object_ti (StringConcatenate ("ti", OrderTicket ()))) // If the time is longer warrant Object Life
if (OrderClose (OrderTicket (), OrderLots (), Ask, Slip, clrRed) == true) // Close the order
pr ("Order close Ok!!!"); // If successful, we will report on the chart
else
pr ("Order close Error!!!" + Error (GetLastError ()), clrRed); // If it fails, return an error message
}
if (OrderType ()> 1)
if (ObjectFind (StringConcatenate ("ti", OrderTicket ())) == 0) // If the object is created and the conditions are met
if ((int) TimeCurrent ()> (int) get_object_ti (StringConcatenate ("ti", OrderTicket ()))) // If the time is longer warrant Object Life
if (OrderDelete (OrderTicket (), clrRed) == true) // delete the order
pr ("Order delete Ok!!!"); // If successful, we will report on the chart
else
pr ("Order delete Error!!!" + Error (GetLastError ()), clrRed); // If it fails, return an error message
}
return false;
}
datetime get_object_ti (string name)
{
return (datetime) ObjectGetInteger ( 0 , name, OBJPROP_TIME);
}
double get_object (string name)
{
return ObjectGetDouble ( 0 , name, OBJPROP_PRICE);
}
void obj_cre_v_line(string txt,color col)
{
if(ObjectFind(0,txt)==-1)
{
ObjectCreate(0,txt,OBJ_VLINE,0,Time[0]+_Period*10*60,0);
ObjectSetInteger(0,txt,OBJPROP_TIME,Time[0]+_Period*10*60);
ObjectSetInteger(0,txt,OBJPROP_COLOR,col);
ObjectSetInteger(0,txt,OBJPROP_WIDTH,2);
ObjectSetString(0,txt,OBJPROP_TOOLTIP,txt);
WindowRedraw();
}
}
void obj_cre (string txt, double pri, color col)
{
if (ObjectFind ( 0 , txt) == -1)
{
ObjectCreate ( 0 , txt, OBJ_ARROW_RIGHT_PRICE, 0 , Time [ 0 ], pri);
ObjectSetInteger ( 0 , txt, OBJPROP_TIME, Time [ 0]);
ObjectSetDouble ( 0 , txt, OBJPROP_PRICE, pri);
ObjectSetInteger ( 0 , txt, OBJPROP_COLOR, col);
ObjectSetInteger ( 0 , txt, OBJPROP_WIDTH, 3);
ObjectSetString ( 0 , txt, OBJPROP_TOOLTIP, txt);
WindowRedraw ();
}
}
void obj_del (string txt)
{
ObjectDelete ( 0 , txt);
}
void his_del_obj ()
{
for (int i = OrdersHistoryTotal () -1; i>= 0 ; i--)
if (OrderSelect (i, SELECT_BY_POS, MODE_HISTORY))
if (OrderMagicNumber () == Magic || Magic == -1)
if (OrderSymbol () == _Symbol)
{
ObjectDelete ( 0 , StringConcatenate (prefix, "Sl", OrderTicket ()));
ObjectDelete ( 0 , StringConcatenate (prefix, "Tp", OrderTicket ()));
ObjectDelete ( 0 , StringConcatenate (prefix, "Br", OrderTicket ()));
ObjectDelete ( 0 , StringConcatenate (prefix, "Tr", OrderTicket ()));
ObjectDelete ( 0 , StringConcatenate (prefix, "Ti", OrderTicket ()));
ObjectDelete ( 0 , StringConcatenate (prefix, "X", OrderTicket ()));
ObjectDelete ( 0 , StringConcatenate ("sl", OrderTicket ()));
ObjectDelete ( 0 , StringConcatenate ("tp", OrderTicket ()));
ObjectDelete ( 0 , StringConcatenate ("br", OrderTicket ()));
ObjectDelete ( 0 , StringConcatenate ("tr", OrderTicket ()));
ObjectDelete ( 0 , StringConcatenate ("ti", OrderTicket ()));
}
}
bool closeorders (int tik)
{
string sy = "";
if (OrderSelect (tik, SELECT_BY_TICKET))
if (OrderMagicNumber () == Magic || Magic == -1)
if (OrderSymbol () == _Symbol)
if (OrderTicket () == tik)
{
sy = OrderSymbol ();
if (OrderType () ==Показано первые 50% кода (символов: 27510)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.