Navigation:Home > Content >

SL_TP_ _Баланс.mq4

Time: 2018-11-14 | Download file:SL_TP_ _Баланс.mq4

//+------------------------------------------------------------------+
//|                                              SL TP + Баланс .mq4 |
//|                                                          VadimVP |
//|                                              [email protected] |
//+------------------------------------------------------------------+
/*
Покажет (при наличии открытых ордеров) Ваш Баланс и Профит на 
указанном Вами ценовом уровне (при достижении ценой этого уровня),
и (по желанию) автоматически переместит StopLoss/TakeProfit 
открытых ордеров на этот указанный Вами уровень (создаст общий для
все ордеров уровень фиксации прибыли или убытка).

Данный скрипт поможет узнать Вам, какой будет размер Вашего
баланса и профита (прибыли) при достижении ценой указанного
Вами уровня (т.е. посмотреть что ожидает Ваш баланс в будущем,
какова будет Ваша прибыль (или убыток), и сколько это процентов 
от размера депозита).

Соответственно у Вас должны иметься открытые ордера на текущем
инструменте, иначе скрипт сообщит что открытых ордеров нет.

После запуска скипта появится мигающая линия и текстовое сообшение
на экране с сообщением "Баланс: **** Профит ***** ( **% от Depo)"
Двигая мигающую линию, установите ее на то ценовой уровень, где 
вам интересено узнать размер баланса и профита при достижении ценой
этого уровня. Текстовое окно обновит информацию по данному уровню.
Эта же информация дублируется в левом верхнем углу графика. Если вам
текстовое окно мешает, можете его удалить или перетащить в другое 
место. Либо измените его шрифт и цвет в тексте советника.

Чтобы прекратить работу скрипта, удалите мигающую линию.

После этого скрипт спросит, хотите ли вы установить новые уровни
Stop и Profit у открытых ордеров текущего инструмента.
Если выберете "Да" - скрипт изменить уровни закрытия у ордеров
таким образом, чтобы при достижении уровня цены мигающей линии
все ордера закрылись и Вы получили ту самую прибыль (убыток), что
показал Вам скрипт (на уровне цены мигающей линии).

То есть скрипт установит общий для всех открытых ордеров уровень
фиксации прибыли или убытка. Чтобы установить общим и уровень 
прибыли, и уровень убытка, скрипт придется запускать дважды.
Сначала установите один уровень, потом второй (над текущей ценой
и под текущей ценой). 

Скипт сообщит об успешности (неуспешности) изменений в Alert-окне.

Имейте ввиду, что новые установки Stop и Profit у открытых ордеров
соответствуют той прибыли (убытку) что показал вам скрипт, только
в случае если вы не добавляете и не удаляете ордера. Если ордера
после работы скрипта добавлялись/удалялись, то запустите скипт
вновь, чтобы актуализировать информацию и уровни.

Скрипт работает только с открытыми ордерами текущего инструмента.

    Так как скрипту для работы необходимо наличие подключения
    терминала к серверу - работать он будет только при наличии
    подключения - иначе выдаст сообщение об отсутствии.

*/
//+------------------------------------------------------------------+
#property copyright "VadimVP"
#property link      "[email protected]"
#include 
//***********************************************************

extern color clr = Red; // Цвет сообщения на экране (Баланс и Профит)

extern int font = 12; // Размер шрифта сообщения на экране (Баланс и Профит)

double STL = 0;
int iii = 0;
double lots = 0;
string res, res1, res2;
int i=0;

//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int init()  {linebye();return(0);}
int deinit(){Comment (" ");ObjectDelete ("10");ObjectDelete ("Label");return(0);}

int start()  {
if (IsConnected()) {
     if (ObjectFind("Label") == (-1)) {linebye();}
     if (ObjectFind("10") == (-1)) {ObjectCreate ("10",OBJ_TEXT,0,Time[WindowBarsPerChart( )/3] , WindowPriceMax(0)  );
     ObjectSetText("10", DoubleToStr (Close[4],4), font, "Arial", clr);}
    
     while (ObjectFind("Label")!=(-1) )     { 
     STL = ObjectGet("Label", 1);     text();
     Comment("\n"+"Значение линии: " +DoubleToStr(STL,Digits)+"\n"
     + "Суммарный лот: " + DoubleToStr(lots(),2)+ "\n"+ "Прибыль/убыток на уровне линии: " + res1
     + " и размер баланса: " + res +"\n" 
     + "Для прекращения работы скрипта удалите мерцающую линию ");
     
     if (iii == 5) {Sleep (30); ObjectSet( "Label", 6, Aqua); WindowRedraw( );} else Sleep (30);   
     if (iii == 10) {Sleep (30); ObjectSet( "Label", 6, Red); WindowRedraw( );} else Sleep (30);     
     if (iii == 10) iii = 0;     iii = iii+1;
     }
     if (lots() != 0) {
     if (MessageBox (" Установить уровень закрытия ордеров по цене мигающей линии??? ","Скрипт интересуется:",1)==1) startset();
     }
}
else MessageBox ("Нет соединения с сервером!!!","  Скрипт сообщает:",0x00000000);
   return(0);
}
//+------------------------------------------------------------------+
int linebye() {// Рисуем линию (которая мигает)
ObjectDelete( "Label"); 
ObjectCreate( "Label", OBJ_HLINE, 0, 0, (Bid-Point*(MarketInfo(Symbol(), MODE_STOPLEVEL))) );
ObjectSet( "Label", 6, White); ObjectSet( "Label", 8, 2); WindowRedraw( ) ;
   return(0);  }
//+------------------------------------------------------------------+


string text() { 
   
   if (funkprice() != 0)  
   {res = DoubleToStr ((AccountBalance( ) - (((STL - funkprice())/Point)*MarketInfo(Symbol(), MODE_TICKVALUE)*lots()*(-1))),0);
   res1 = DoubleToStr (( (((STL - funkprice())/Point)*MarketInfo(Symbol(), MODE_TICKVALUE)*lots())),1);
   res2 = DoubleToStr ( (100*(((STL - funkprice())/Point)*MarketInfo(Symbol(), MODE_TICKVALUE)*lots()))/AccountBalance(),2);}
   else {res = " Суммарный лот = 0! "; res1 = ""; res2 = "";}
   
   if (((((STL - funkprice())/Point)*MarketInfo(Symbol(), MODE_TICKVALUE)*lots()))>0) clr = Magenta; else clr = Red;
 
   
   ObjectSetText("10"," Баланс: "+res+" "+AccountCurrency( )+", Профит: "+res1+" "+AccountCurrency( )+" ( "+res2+"% от Depo ) " , font, "Arial", clr);
   WindowRedraw( ) ;
return(0); }
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
double funkprice() {

   double price=0;
   if (lots()!=0)
   {
    if (lots()>0)  price = MarketInfo(Symbol(),MODE_BID) - ((symbolprofit()/(MarketInfo(Symbol(), MODE_TICKVALUE)*lots()))*Point);
    if (lots()<0)  price = MarketInfo(Symbol(),MODE_ASK) - ((symbolprofit()/(MarketInfo(Symbol(), MODE_TICKVALUE)*lots()))*Point);
   }
   return (price);   }
   
//*******************************************
int startset()  { int kol=0; int kolOK=0; int i=0; double ilots=0;
   for (i=0; iAsk) 
         { if (OrderType()==OP_BUY) {if (STL == OrderTakeProfit()) resi=resi+1; else { if (OrderModify(OrderTicket(),0,OrderStopLoss(),STL,0,CLR_NONE)) resi = resi+1;}    }
           if (OrderType()==OP_SELL){if (STL == OrderStopLoss()) resi=resi+1; else { if (  OrderModify(OrderTicket(),0,STL,OrderTakeProfit(),0,CLR_NONE)) resi = resi+1;}     } }
         if (STL

Recommend