//+------------------------------------------------------------------+
//| Basket_Manager_03.mq4 |
//| Copyright � 2015, Khalil Abokwaik. |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Khalil Abokwaik"
#property link "http://www.forexfactory.com/abokwaik"
#property description "BASKET MANAGER - MANUAL TRADING - EA on a Basket Offline Chart"
#property description "Basket Chart must be created by Create_Basket_Script_03"
//-----------------------------
#include <stdlib.mqh>
#include <WinUser32.mqh>
#include <ChartObjects\ChartObjectsTxtControls.mqh>
//#property strict
//--- input parameters
input int Magic_Number = 555;
input double fixed_lot_size = 0.01;
input double Money_TP = 1000;
input double Money_SL = 1000;
input bool Money_Activated = false;
input string color_setup = "Control Panel Colors Setup";
input color Ask_Line_Color = clrRed;
input color Market_Order_Color = clrGreen;
input color Stop_Order_Color = clrRoyalBlue;
input color Limit_Order_Color = clrPink;
input color TP_Color = clrLimeGreen;
input color SL_Color = clrOrangeRed;
//-----------
int oper_max_tries=10;
double basket_PL=0;
string basket_pairs="Pairs:",ma_text,mg_text,ls_text;
//--- buttons ---------------------------------------------------
string __btn_Market_Orders = "__btn_Market_Orders";
string __btn_Pending_Orders = "__btn_Pending_Orders";
string __btn_close_basket = "__btn_close_basket";
string __btn_buy_close_1 = "__btn_buy_close_1";
string __btn_buy_close_2 = "__btn_buy_close_2";
string __btn_buy_close_3 = "__btn_buy_close_3";
string __btn_sell_close_1 = "__btn_sell_close_1";
string __btn_sell_close_2 = "__btn_sell_close_2";
string __btn_sell_close_3 = "__btn_sell_close_3";
string __btn_buy_basket_1 = "__btn_buy_basket_1";
string __btn_basket_Buy_TP_1 = "__btn_basket_Buy_TP_1";
string __btn_basket_Buy_SL_1 = "__btn_basket_Buy_SL_1";
string __btn_sell_basket_1 = "__btn_sell_basket_1";
string __btn_basket_Sell_TP_1 = "__btn_basket_Sell_TP_1";
string __btn_basket_Sell_SL_1 = "__btn_basket_Sell_SL_1";
//---
string __btn_buy_basket_2 = "__btn_buy_basket_2";
string __btn_basket_Buy_TP_2 = "__btn_basket_Buy_TP_2";
string __btn_basket_Buy_SL_2 = "__btn_basket_Buy_SL_2";
string __btn_sell_basket_2 = "__btn_sell_basket_2";
string __btn_basket_Sell_TP_2 = "__btn_basket_Sell_TP_2";
string __btn_basket_Sell_SL_2 = "__btn_basket_Sell_SL_2";
//---
string __btn_buy_basket_3 = "__btn_buy_basket_3";
string __btn_basket_Buy_TP_3 = "__btn_basket_Buy_TP_3";
string __btn_basket_Buy_SL_3 = "__btn_basket_Buy_SL_3";
string __btn_sell_basket_3 = "__btn_sell_basket_3";
string __btn_basket_Sell_TP_3 = "__btn_basket_Sell_TP_3";
string __btn_basket_Sell_SL_3 = "__btn_basket_Sell_SL_3";
//---
string __btn_Act_Lines = "__btn_Act_Lines";
string __btn_buy_stop_1 = "__btn_buy_stop_1";
string __btn_buy_stop_TP_1 = "__btn_buy_stop_TP_1";
string __btn_buy_stop_SL_1 = "__btn_buy_stop_SL_1";
string __btn_sell_stop_1 = "__btn_sell_stop_1";
string __btn_sell_stop_TP_1 = "__btn_sell_stop_TP_1";
string __btn_sell_stop_SL_1 = "__btn_sell_stop_SL_1";
string __btn_buy_stop_2 = "__btn_buy_stop_2";
string __btn_buy_stop_TP_2 = "__btn_buy_stop_TP_2";
string __btn_buy_stop_SL_2 = "__btn_buy_stop_SL_2";
string __btn_sell_stop_2 = "__btn_sell_stop_2";
string __btn_sell_stop_TP_2 = "__btn_sell_stop_TP_2";
string __btn_sell_stop_SL_2 = "__btn_sell_stop_SL_2";
string __btn_buy_limit_1 = "__btn_buy_limit_1";
string __btn_buy_limit_TP_1 = "__btn_buy_limit_TP_1";
string __btn_buy_limit_SL_1 = "__btn_buy_limit_SL_1";
string __btn_sell_limit_1 = "__btn_sell_limit_1";
string __btn_sell_limit_TP_1 = "__btn_sell_limit_TP_1";
string __btn_sell_limit_SL_1 = "__btn_sell_limit_SL_1";
string __btn_buy_limit_2 = "__btn_buy_limit_2";
string __btn_buy_limit_TP_2 = "__btn_buy_limit_TP_2";
string __btn_buy_limit_SL_2 = "__btn_buy_limit_SL_2";
string __btn_sell_limit_2 = "__btn_sell_limit_2";
string __btn_sell_limit_TP_2 = "__btn_sell_limit_TP_2";
string __btn_sell_limit_SL_2 = "__btn_sell_limit_SL_2";
//----- lines ----------------------------------------------------
string __lin_basket_Ask = "__lin_basket_Ask";
string __lin_basket_Buy_1 = "__lin_basket_Buy_1";
string __lin_basket_Buy_TP_1 = "__lin_basket_Buy_TP_1";
string __lin_basket_Buy_SL_1 = "__lin_basket_Buy_SL_1";
string __lin_basket_Sell_1 = "__lin_basket_Sell_1";
string __lin_basket_Sell_TP_1 = "__lin_basket_Sell_TP_1";
string __lin_basket_Sell_SL_1 = "__lin_basket_Sell_SL_1";
string __lin_basket_Buy_2 = "__lin_basket_Buy_2";
string __lin_basket_Buy_TP_2 = "__lin_basket_Buy_TP_2";
string __lin_basket_Buy_SL_2 = "__lin_basket_Buy_SL_2";
string __lin_basket_Sell_2 = "__lin_basket_Sell_2";
string __lin_basket_Sell_TP_2 = "__lin_basket_Sell_TP_2";
string __lin_basket_Sell_SL_2 = "__lin_basket_Sell_SL_2";
string __lin_basket_Buy_3 = "__lin_basket_Buy_3";
string __lin_basket_Buy_TP_3 = "__lin_basket_Buy_TP_3";
string __lin_basket_Buy_SL_3 = "__lin_basket_Buy_SL_3";
string __lin_basket_Sell_3 = "__lin_basket_Sell_3";
string __lin_basket_Sell_TP_3 = "__lin_basket_Sell_TP_3";
string __lin_basket_Sell_SL_3 = "__lin_basket_Sell_SL_3";
//--------------
string __lin_buy_stop_1 = "__lin_buy_stop_1";
string __lin_buy_stop_TP_1 = "__lin_buy_stop_TP_1";
string __lin_buy_stop_SL_1 = "__lin_buy_stop_SL_1";
string __lin_buy_stop_2 = "__lin_buy_stop_2";
string __lin_buy_stop_TP_2 = "__lin_buy_stop_TP_2";
string __lin_buy_stop_SL_2 = "__lin_buy_stop_SL_2";
string __lin_sell_stop_1 = "__lin_sell_stop_1";
string __lin_sell_stop_TP_1= "__lin_sell_stop_TP_1";
string __lin_sell_stop_SL_1= "__lin_sell_stop_SL_1";
string __lin_sell_stop_2 = "__lin_sell_stop_2";
string __lin_sell_stop_TP_2= "__lin_sell_stop_TP_2";
string __lin_sell_stop_SL_2= "__lin_sell_stop_SL_2";
string __lin_buy_limit_1 = "__lin_buy_limit_1";
string __lin_buy_limit_TP_1= "__lin_buy_limit_TP_1";
string __lin_buy_limit_SL_1= "__lin_buy_limit_SL_1";
string __lin_buy_limit_2 = "__lin_buy_limit_2";
string __lin_buy_limit_TP_2= "__lin_buy_limit_TP_2";
string __lin_buy_limit_SL_2= "__lin_buy_limit_SL_2";
string __lin_sell_limit_1 = "__lin_sell_limit_1";
string __lin_sell_limit_TP_1= "__lin_sell_limit_TP_1";
string __lin_sell_limit_SL_1= "__lin_sell_limit_SL_1";
string __lin_sell_limit_2 = "__lin_sell_limit_2";
string __lin_sell_limit_TP_2= "__lin_sell_limit_TP_2";
string __lin_sell_limit_SL_2= "__lin_sell_limit_SL_2";
//---- text and labels ---------------------------------------------
string __Status_Line = "__Status_Line";
//------------------------------------------------------------------
string pairs[];
double dw[];
double ls[];
string sep=","; // A separator as a character
bool stop_robot=false,action=false;
datetime last_time=0;
//ushort u_sep; // The code of the separator character
//--- Get the separator code
ushort u_sep=StringGetCharacter(sep,0);
int x = 0,sclr=0;
//----------------------------------------------------------
void init()
{
BasketGetPairs();
if(ObjectFind(0,__btn_Market_Orders)>=0)
{
if(ObjectGetInteger(0,__btn_Market_Orders,OBJPROP_STATE)==0) draw_interface();
}
else draw_interface();
//-- clear lines if no orders exist -----------------------------------------------------------------------------------
clear_lines();
if(!EventSetTimer(1)) Alert("Error in Creating Timer");;
//start();
}
//----------------------------------------------------------
void OnTimer()
{
RefreshRates();
//Comment(Magic_Number,",",basket_pairs, " PipValue = ",DoubleToStr(get_basket_pip_value(),2), " Spread=",DoubleToStr(get_spread(),1));
Comment(Magic_Number," ", basket_pairs);//," DW :", dw, " LSM: ",ls);
refresh();
//-- Show Ask Line ---------------------------------------------------------------------------------------------------
/*if(ObjectFind(0,__lin_basket_Ask)>=0)
ObjectSetDouble(0,__lin_basket_Ask,OBJPROP_PRICE,Close[0]+NormalizeDouble(get_spread()*Point,Digits));
else
action=!HLineCreate(0,__lin_basket_Ask,0,Close[0]+NormalizeDouble(get_spread()*Point,Digits),Ask_Line_Color,0,1,false,false,false,0);
*/
if(market_orders()==0)
{ ObjectSetString(0,__btn_close_basket,OBJPROP_TEXT,"No Market Orders");
ObjectSetInteger(0,__btn_close_basket,OBJPROP_STATE,0);
}
//-- Update Order P/L Display ------------------------------------------------------------------------------------------
update_order_PL_Display();
//-----------------------------------
if(Money_Activated) check_money_SL_TP();
if(ObjectGetInteger(0,__btn_Act_Lines,OBJPROP_COLOR)==clrWhite)
{ check_SL_TP();
check_Pending_Orders();
}
//-- update status line
if(ObjectFind(0,__Status_Line)>=0)
{
if(Money_Activated)
ma_text=StringConcatenate("Active Money TP= ",Money_TP," SL= ",Money_SL);
else ma_text="Money Targets Not Active";
mg_text=StringConcatenate("Magic = ",Magic_Number);
ls_text=StringConcatenate("Lot Size = ",fixed_lot_size);
ObjectSetString(0,__Status_Line,OBJPROP_TEXT,0,StringConcatenate(mg_text," ",ls_text," ",ma_text));
}
return;
}
//----------------------------------------------------------
void deinit()
{
EventKillTimer();
}
//----------------------------------------------------------
void draw_interface()
{
if(ChartGetInteger(0,CHART_SHIFT)==0)
{
ChartSetInteger(0,CHART_SHIFT,1);
ChartRedraw();
}
Create_Button(__btn_Market_Orders ,"Market Orders" ,121,20,1,150,25,clrSienna,clrWhite);
Create_Button(__btn_buy_basket_1 ,"BUY" ,60 ,20,1,150,46,clrRoyalBlue,clrWhite);
Create_Button(__btn_basket_Buy_TP_1 ,"TP" ,30 ,20,1,150,67,clrRoyalBlue,clrWhite);
Create_Button(__btn_basket_Buy_SL_1 ,"SL" ,29 ,20,1,119,67,clrRoyalBlue,clrWhite);
Create_Button(__btn_sell_basket_1 ,"SELL" ,60 ,20,1,89 ,46,clrCrimson,clrWhite);
Create_Button(__btn_basket_Sell_TP_1,"TP" ,30 ,20,1,89 ,67,clrCrimson,clrWhite);
Create_Button(__btn_basket_Sell_SL_1,"SL" ,29 ,20,1,58 ,67,clrCrimson,clrWhite);
Create_Button(__btn_buy_close_1 ,"X" ,20 ,20,1,170,46,clrWhite,clrBlack);
Create_Button(__btn_sell_close_1 ,"X" ,20 ,20,1,29,46,clrWhite,clrBlack);
//__btn_buy_close_1
//--
Create_Button(__btn_buy_basket_2 ,"BUY" ,60 ,20,1,150,90,clrRoyalBlue,clrWhite);
Create_Button(__btn_buy_close_2 ,"X" ,20 ,20,1,170,90,clrWhite,clrBlack);
Create_Button(__btn_basket_Buy_TP_2 ,"TP" ,30 ,20,1,150,112,clrRoyalBlue,clrWhite);
Create_Button(__btn_basket_Buy_SL_2 ,"SL" ,29 ,20,1,119,112,clrRoyalBlue,clrWhite);
Create_Button(__btn_sell_basket_2 ,"SELL" ,60 ,20,1,89 ,90,clrCrimson,clrWhite);
Create_Button(__btn_sell_close_2 ,"X" ,20 ,20,1,29,90,clrWhite,clrBlack);
Create_Button(__btn_basket_Sell_TP_2,"TP" ,30 ,20,1,89 ,112,clrCrimson,clrWhite);
Create_Button(__btn_basket_Sell_SL_2,"SL" ,29 ,20,1,58 ,112,clrCrimson,clrWhite);
//--
Create_Button(__btn_buy_basket_3 ,"BUY" ,60 ,20,1,150,135,clrRoyalBlue,clrWhite);
Create_Button(__btn_buy_close_3 ,"X" ,20 ,20,1,170,135,clrWhite,clrBlack);
Create_Button(__btn_basket_Buy_TP_3 ,"TP" ,30 ,20,1,150,156,clrRoyalBlue,clrWhite);
Create_Button(__btn_basket_Buy_SL_3 ,"SL" ,29 ,20,1,119,156,clrRoyalBlue,clrWhite);
Create_Button(__btn_sell_basket_3 ,"SELL" ,60 ,20,1,89 ,135,clrCrimson,clrWhite);
Create_Button(__btn_sell_close_3 ,"X" ,20 ,20,1,29,135,clrWhite,clrBlack);
Create_Button(__btn_basket_Sell_TP_3,"TP" ,30 ,20,1,89 ,156,clrCrimson,clrWhite);
Create_Button(__btn_basket_Sell_SL_3,"SL" ,29 ,20,1,58 ,156,clrCrimson,clrWhite);
Create_Button(__btn_close_basket ,"No Market Orders" ,121,20,1,150,177,clrDarkGreen,clrWhite);
//--
Create_Button(__btn_Pending_Orders ,"Pending Orders" ,121,20,1,150,200,clrSienna,clrWhite);
//--
Create_Button(__btn_buy_stop_1 ,"Buy Stop" ,60 ,20,1,150,221,clrRoyalBlue,clrWhite);
Create_Button(__btn_buy_stop_TP_1 ,"TP" ,30 ,20,1,150,242,clrRoyalBlue,clrWhite);
Create_Button(__btn_buy_stop_SL_1 ,"SL" ,29 ,20,1,119,242,clrRoyalBlue,clrWhite);
Create_Button(__btn_sell_stop_1 ,"Sell Stop" ,60 ,20,1,89 ,221,clrCrimson,clrWhite);
Create_Button(__btn_sell_stop_TP_1,"TP" ,30 ,20,1,89 ,242,clrCrimson,clrWhite);
Create_Button(__btn_sell_stop_SL_1,"SL" ,29 ,20,1,58 ,242,clrCrimson,clrWhite);
Create_Button(__btn_buy_stop_2 ,"Buy Stop" ,60 ,20,1,150,263,clrRoyalBlue,clrWhite);
Create_Button(__btn_buy_stop_TP_2 ,"TP" ,30 ,20,1,150,284,clrRoyalBlue,clrWhite);
Create_Button(__btn_buy_stop_SL_2 ,"SL" ,29 ,20,1,119,284,clrRoyalBlue,clrWhite);
Create_Button(__btn_sell_stop_2 ,"Sell Stop" ,60 ,20,1,89 ,263,clrCrimson,clrWhite);
Create_Button(__btn_sell_stop_TP_2,"TP" ,30 ,20,1,89 ,284,clrCrimson,clrWhite);
Create_Button(__btn_sell_stop_SL_2,"SL" ,29 ,20,1,58 ,284,clrCrimson,clrWhite);
Create_Button(__btn_buy_limit_1 ,"Buy Limit" ,60 ,20,1,150,306,clrRoyalBlue,clrWhite);
Create_Button(__btn_buy_limit_TP_1 ,"TP" ,30 ,20,1,150,327,clrRoyalBlue,clrWhite);
Create_Button(__btn_buy_limit_SL_1 ,"SL" ,29 ,20,1,119,327,clrRoyalBlue,clrWhite);
Create_Button(__btn_sell_limit_1 ,"Sell Limit" ,60 ,20,1,89 ,306,clrCrimson,clrWhite);
Create_Button(__btn_sell_limit_TP_1,"TP" ,30 ,20,1,89 ,327,clrCrimson,clrWhite);
Create_Button(__btn_sell_limit_SL_1,"SL" ,29 ,20,1,58 ,327,clrCrimson,clrWhite);
Create_Button(__btn_buy_limit_2 ,"Buy Limit" ,60 ,20,1,150,348,clrRoyalBlue,clrWhite);
Create_Button(__btn_buy_limit_TP_2 ,"TP" ,30 ,20,1,150,369,clrRoyalBlue,clrWhite);
Create_Button(__btn_buy_limit_SL_2 ,"SL" ,29 ,20,1,119,369,clrRoyalBlue,clrWhite);
Create_Button(__btn_sell_limit_2 ,"Sell Limit" ,60 ,20,1,89 ,348,clrCrimson,clrWhite);
Create_Button(__btn_sell_limit_TP_2,"TP" ,30 ,20,1,89 ,369,clrCrimson,clrWhite);
Create_Button(__btn_sell_limit_SL_2,"SL" ,29 ,20,1,58 ,369,clrCrimson,clrWhite);
Create_Button(__btn_Act_Lines ,"Lines De-Activated" ,121,20,1,150,392,clrCadetBlue,clrBlue);
Create_Label(__Status_Line,"*** Status Line ***",500,20,4,300,0,clrBlack,clrYellow,8);
//,500,20,5,5,5,clrBlue,clrWhite);
}
//----------------------------------------------------------
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
double price_shift=0;
if(id==CHARTEVENT_OBJECT_CLICK)
{
price_shift=NormalizeDouble((ChartGetDouble(0,CHART_PRICE_MAX)-ChartGetDouble(0,CHART_PRICE_MIN))/10,4);
if(sparam==__btn_Market_Orders)
{ if(ObjectFind(0,__btn_buy_basket_1)<0) draw_interface();
else delete_buttons();
}
//-- Market Orders -----------------------------------------------------------------------
if(sparam==__btn_buy_basket_1) Change_Button_Status(__btn_buy_basket_1 ,OP_BUY ,Magic_Number*100+01,__lin_basket_Buy_1);
if(sparam==__btn_sell_basket_1) Change_Button_Status(__btn_sell_basket_1,OP_SELL,Magic_Number*100+11,__lin_basket_Sell_1);
if(sparam==__btn_buy_basket_2) Change_Button_Status(__btn_buy_basket_2 ,OP_BUY ,Magic_Number*100+02,__lin_basket_Buy_2);
if(sparam==__btn_sell_basket_2) Change_Button_Status(__btn_sell_basket_2,OP_SELL,Magic_Number*100+12,__lin_basket_Sell_2);
if(sparam==__btn_buy_basket_3) Change_Button_Status(__btn_buy_basket_3 ,OP_BUY ,Magic_Number*100+03,__lin_basket_Buy_3);
if(sparam==__btn_sell_basket_3) Change_Button_Status(__btn_sell_basket_3,OP_SELL,Magic_Number*100+13,__lin_basket_Sell_3);
//--- close check box --------------
if(sparam==__btn_buy_close_1) close_order(__btn_buy_basket_1 ,OP_BUY ,Magic_Number*100+01,__lin_basket_Buy_1);
if(sparam==__btn_buy_close_2) close_order(__btn_buy_basket_2 ,OP_BUY ,Magic_Number*100+02,__lin_basket_Buy_2);
if(sparam==__btn_buy_close_3) close_order(__btn_buy_basket_3 ,OP_BUY ,Magic_Number*100+03,__lin_basket_Buy_3);
if(sparam==__btn_sell_close_1) close_order(__btn_sell_basket_1,OP_SELL,Magic_Number*100+11,__lin_basket_Sell_1);
if(sparam==__btn_sell_close_2) close_order(__btn_sell_basket_2,OP_SELL,Magic_Number*100+12,__lin_basket_Sell_2);
if(sparam==__btn_sell_close_3) close_order(__btn_sell_basket_3,OP_SELL,Magic_Number*100+13,__lin_basket_Sell_3);
//-------------------Markert Orders SL/TP _ 1
if(sparam==__btn_basket_Buy_SL_1 && ObjectGetString(0,__btn_buy_basket_1,OBJPROP_TEXT)!="BUY")
{ if(ObjectFind(0,__lin_basket_Buy_SL_1)!=0) action=!HLineCreate(0,__lin_basket_Buy_SL_1,0,Close[0]-price_shift,SL_Color,1,1,true,true,false,0);
else ObjectDelete(__lin_basket_Buy_SL_1);
ChartRedraw();
}
if(sparam==__btn_basket_Buy_TP_1 && ObjectGetString(0,__btn_buy_basket_1,OBJPROP_TEXT)!="BUY")
{ if(ObjectFind(0,__lin_basket_Buy_TP_1)!=0) action=!HLineCreate(0,__lin_basket_Buy_TP_1,0,Close[0]+price_shift,TP_Color,1,1,true,true,false,0);
else ObjectDelete(__lin_basket_Buy_TP_1);
ChartRedraw();
}
if(sparam==__btn_basket_Sell_SL_1 && ObjectGetString(0,__btn_sell_basket_1,OBJPROP_TEXT)!="SELL")
{ if(ObjectFind(0,__lin_basket_Sell_SL_1)!=0) action=!HLineCreate(0,__lin_basket_Sell_SL_1,0,Close[0]+price_shift,SL_Color,1,1,true,true,false,0);
else ObjectDelete(__lin_basket_Sell_SL_1);
ChartRedraw();
}
if(sparam==__btn_basket_Sell_TP_1 && ObjectGetString(0,__btn_sell_basket_1,OBJPROP_TEXT)!="SELL")
{ if(ObjectFind(0,__lin_basket_Sell_TP_1)!=0) action=!HLineCreate(0,__lin_basket_Sell_TP_1,0,Close[0]-price_shift,TP_Color,1,1,true,true,false,0);
else ObjectDelete(__lin_basket_Sell_TP_1);
ChartRedraw();
}
//------------------- Markert Orders SL/TP _ 2
if(sparam==__btn_basket_Buy_SL_2 && ObjectGetString(0,__btn_buy_basket_2,OBJPROP_TEXT)!="BUY")
{ if(ObjectFind(0,__lin_basket_Buy_SL_2)!=0) action=!HLineCreate(0,__lin_basket_Buy_SL_2,0,Close[0]-price_shift,SL_Color,1,1,true,true,false,0);
else ObjectDelete(__lin_basket_Buy_SL_2);
ChartRedraw();
}
if(sparam==__btn_basket_Buy_TP_2 && ObjectGetString(0,__btn_buy_basket_2,OBJPROP_TEXT)!="BUY")
{ if(ObjectFind(0,__lin_basket_Buy_TP_2)!=0) action=!HLineCreate(0,__lin_basket_Buy_TP_2,0,Close[0]+price_shift,TP_Color,1,1,true,true,false,0);
else ObjectDelete(__lin_basket_Buy_TP_2);
ChartRedraw();
}
if(sparam==__btn_basket_Sell_SL_2 && ObjectGetString(0,__btn_sell_basket_2,OBJPROP_TEXT)!="SELL")
{ if(ObjectFind(0,__lin_basket_Sell_SL_2)!=0) action=!HLineCreate(0,__lin_basket_Sell_SL_2,0,Close[0]+price_shift,SL_Color,1,1,true,true,false,0);
else ObjectDelete(__lin_basket_Sell_SL_2);
ChartRedraw();
}
if(sparam==__btn_basket_Sell_TP_2 && ObjectGetString(0,__btn_sell_basket_2,OBJPROP_TEXT)!="SELL")
{ if(ObjectFind(0,__lin_basket_Sell_TP_2)!=0) action=!HLineCreate(0,__lin_basket_Sell_TP_2,0,Close[0]-price_shift,TP_Color,1,1,true,true,false,0);
else ObjectDelete(__lin_basket_Sell_TP_2);
ChartRedraw();
}
//------------------- Markert Orders SL/TP _ 3
if(sparam==__btn_basket_Buy_SL_3 && ObjectGetString(0,__btn_buy_basket_3,OBJPROP_TEXT)!="BUY")
{ if(ObjectFind(0,__lin_basket_Buy_SL_3)!=0) action=!HLineCreate(0,__lin_basket_Buy_SL_3,0,Close[0]-price_shift,SL_Color,1,1,true,true,false,0);
else ObjectDelete(__lin_basket_Buy_SL_3);
ChartRedraw();
}
if(sparam==__btn_basket_Buy_TP_3 && ObjectGetString(0,__btn_buy_basket_3,OBJPROP_TEXT)!="BUY")
{ if(ObjectFind(0,__lin_basket_Buy_TP_3)!=0) action=!HLineCreate(0,__lin_basket_Buy_TP_3,0,Close[0]+price_shift,TP_Color,1,1,true,true,false,0);
else ObjectDelete(__lin_basket_Buy_TP_3);
ChartRedraw();
}
if(sparam==__btn_basket_Sell_SL_3 && ObjectGetString(0,__btn_sell_basket_3,OBJPROP_TEXT)!="SELL")
{ if(ObjectFind(0,__lin_basket_Sell_SL_3)!=0) action=!HLineCreate(0,__lin_basket_Sell_SL_3,0,Close[0]+price_shift,SL_Color,1,1,true,true,false,0);
else ObjectDelete(__lin_basket_Sell_SL_3);
ChartRedraw();
}
if(sparam==__btn_basket_Sell_TP_3 && ObjectGetString(0,__btn_sell_basket_3,OBJPROP_TEXT)!="SELL")
{ if(ObjectFind(0,__lin_basket_Sell_TP_3)!=0) action=!HLineCreate(0,__lin_basket_Sell_TP_3,0,Close[0]-price_shift,TP_Color,1,1,true,true,false,0);
else ObjectDelete(__lin_basket_Sell_TP_3);
ChartRedraw();
}
//-- Close Basket -----------------------------------------------------------------------
if(sparam==__btn_close_basket)
{ ObjectSetString(0,__btn_close_basket,OBJPROP_TEXT,"Closing...");
Change_Button_Status_ALL(__btn_buy_basket_1 ,OP_BUY ,Magic_Number*100+01,__lin_basket_Buy_1);
Change_Button_Status_ALL(__btn_sell_basket_1,OP_SELL,Magic_Number*100+11,__lin_basket_Sell_1);
Change_Button_Status_ALL(__btn_buy_basket_2 ,OP_BUY ,Magic_Number*100+02,__lin_basket_Buy_2);
Change_Button_Status_ALL(__btn_sell_basket_2,OP_SELL,Magic_Number*100+12,__lin_basket_Sell_2);
Change_Button_Status_ALL(__btn_buy_basket_3 ,OP_BUY ,Magic_Number*100+03,__lin_basket_Buy_3);
Change_Button_Status_ALL(__btn_sell_basket_3,OP_SELL,Magic_Number*100+13,__lin_basket_Sell_3);
ObjectSetInteger(0,__btn_close_basket,OBJPROP_STATE,0);
ObjectSetString(0,__btn_close_basket,OBJPROP_TEXT,"No Market Orders");
}
//-- Pending Orders :Stop Orders -----------------------------------------------------------------------
if(sparam==__btn_buy_stop_1)
{ if(ObjectFind(0,__lin_buy_stop_1)!=0)
{ action=HLineCreate(0,__lin_buy_stop_1,0,Close[0]+price_shift,Stop_Order_Color,1,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_buy_stop_1,OBJPROP_TEXT,StringConcatenate("1st Buy Stop ",fixed_lot_size));
}
else
{ ObjectDelete(__lin_buy_stop_1);
ObjectDelete(__lin_buy_stop_TP_1);
ObjectDelete(__lin_buy_stop_SL_1);
}
ChartRedraw();
}
if(sparam==__btn_buy_stop_TP_1 && ObjectFind(0,__lin_buy_stop_1) >=0)
{ if(ObjectFind(0,__lin_buy_stop_TP_1)!=0)
{ action=HLineCreate(0,__lin_buy_stop_TP_1,0,ObjectGetDouble(0,__lin_buy_stop_1,OBJPROP_PRICE)+price_shift,
TP_Color,1,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_buy_stop_TP_1,OBJPROP_TEXT,StringConcatenate("1st Buy Stop TP"));
}
else ObjectDelete(__lin_buy_stop_TP_1);
ChartRedraw();
}
if(sparam==__btn_buy_stop_SL_1 && ObjectFind(0,__lin_buy_stop_1) >=0)
{ if(ObjectFind(0,__lin_buy_stop_SL_1)!=0)
{ action=HLineCreate(0,__lin_buy_stop_SL_1,0,ObjectGetDouble(0,__lin_buy_stop_1,OBJPROP_PRICE)-price_shift,
SL_Color,1,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_buy_stop_SL_1,OBJPROP_TEXT,StringConcatenate("1st Buy Stop SL"));
}
else ObjectDelete(__lin_buy_stop_SL_1);
ChartRedraw();
}
if(sparam==__btn_buy_stop_2)
{ if(ObjectFind(0,__lin_buy_stop_2)!=0)
{ action=HLineCreate(0,__lin_buy_stop_2,0,Close[0]+price_shift,Stop_Order_Color,1,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_buy_stop_2,OBJPROP_TEXT,StringConcatenate("2nd Buy Stop ",fixed_lot_size));
}
else
{ ObjectDelete(__lin_buy_stop_2);
ObjectDelete(__lin_buy_stop_TP_2);
ObjectDelete(__lin_buy_stop_SL_2);
}
ChartRedraw();
}
if(sparam==__btn_buy_stop_TP_2 && ObjectFind(0,__lin_buy_stop_2) >=0)
{ if(ObjectFind(0,__lin_buy_stop_TP_2)!=0)
{ action=HLineCreate(0,__lin_buy_stop_TP_2,0,ObjectGetDouble(0,__lin_buy_stop_2,OBJPROP_PRICE)+price_shift,
TP_Color,1,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_buy_stop_TP_2,OBJPROP_TEXT,StringConcatenate("2nd Buy Stop TP"));
}
else ObjectDelete(__lin_buy_stop_TP_2);
ChartRedraw();
}
if(sparam==__btn_buy_stop_SL_2 && ObjectFind(0,__lin_buy_stop_2) >=0)
{ if(ObjectFind(0,__lin_buy_stop_SL_2)!=0)
{ action=HLineCreate(0,__lin_buy_stop_SL_2,0,ObjectGetDouble(0,__lin_buy_stop_2,OBJPROP_PRICE)-price_shift,
SL_Color,1,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_buy_stop_SL_2,OBJPROP_TEXT,StringConcatenate("2nd Buy Stop SL"));
}
else ObjectDelete(__lin_buy_stop_SL_2);
ChartRedraw();
}
if(sparam==__btn_sell_stop_1)
{ if(ObjectFind(0,__lin_sell_stop_1)!=0)
{ action=HLineCreate(0,__lin_sell_stop_1,0,Close[0]-price_shift,Stop_Order_Color,1,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_sell_stop_1,OBJPROP_TEXT,StringConcatenate("1st Sell Stop ",fixed_lot_size));
}
else
{ ObjectDelete(__lin_sell_stop_1);
ObjectDelete(__lin_sell_stop_TP_1);
ObjectDelete(__lin_sell_stop_SL_1);
}
ChartRedraw();
}
if(sparam==__btn_sell_stop_TP_1 && ObjectFind(0,__lin_sell_stop_1) >=0)
{ if(ObjectFind(0,__lin_sell_stop_TP_1)!=0)
{ action=HLineCreate(0,__lin_sell_stop_TP_1,0,ObjectGetDouble(0,__lin_sell_stop_1,OBJPROP_PRICE)-price_shift,
TP_Color,1,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_sell_stop_TP_1,OBJPROP_TEXT,StringConcatenate("1st Sell Buy Stop TP"));
}
else ObjectDelete(__lin_sell_stop_TP_1);
ChartRedraw();
}
if(sparam==__btn_sell_stop_SL_1 && ObjectFind(0,__lin_sell_stop_1) >=0)
{ if(ObjectFind(0,__lin_sell_stop_SL_1)!=0)
{ action=HLineCreate(0,__lin_sell_stop_SL_1,0,ObjectGetDouble(0,__lin_sell_stop_1,OBJPROP_PRICE)+price_shift,
SL_Color,1,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_sell_stop_SL_1,OBJPROP_TEXT,StringConcatenate("1st Sell Stop SL"));
}
else ObjectDelete(__lin_sell_stop_SL_1);
ChartRedraw();
}
if(sparam==__btn_sell_stop_2)
{ if(ObjectFind(0,__lin_sell_stop_2)!=0)
{ action=HLineCreate(0,__lin_sell_stop_2,0,Close[0]-price_shift,Stop_Order_Color,1,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_sell_stop_2,OBJPROP_TEXT,StringConcatenate("2nd Sell Stop ",fixed_lot_size));
}
else
{ ObjectDelete(__lin_sell_stop_2);
ObjectDelete(__lin_sell_stop_TP_2);
ObjectDelete(__lin_sell_stop_SL_2);
}
ChartRedraw();
}
if(sparam==__btn_sell_stop_TP_2 && ObjectFind(0,__lin_sell_stop_2) >=0)
{ if(ObjectFind(0,__lin_sell_stop_TP_2)!=0)
{ action=HLineCreate(0,__lin_sell_stop_TP_2,0,ObjectGetDouble(0,__lin_sell_stop_2,OBJPROP_PRICE)-price_shift,
TP_Color,1,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_sell_stop_TP_2,OBJPROP_TEXT,StringConcatenate("2nd Sell Stop TP"));
}
else ObjectDelete(__lin_sell_stop_TP_2);
ChartRedraw();
}
if(sparam==__btn_sell_stop_SL_2 && ObjectFind(0,__lin_sell_stop_2) >=0)
{ if(ObjectFind(0,__lin_sell_stop_SL_2)!=0)
{ action=HLineCreate(0,__lin_sell_stop_SL_2,0,ObjectGetDouble(0,__lin_sell_stop_2,OBJPROP_PRICE)+price_shift,
SL_Color,1,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_sell_stop_SL_2,OBJPROP_TEXT,StringConcatenate("2nd Sell Stop SL"));
}
else ObjectDelete(__lin_sell_stop_SL_2);
ChartRedraw();
}
//-- Pending Orders :Limit Orders -----------------------------------------------------------------------
if(sparam==__btn_buy_limit_1)
{ if(ObjectFind(0,__lin_buy_limit_1)!=0)
{ action=HLineCreate(0,__lin_buy_limit_1,0,Close[0]-price_shift,Limit_Order_Color,4,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_buy_limit_1,OBJPROP_TEXT,StringConcatenate("1st Buy Limit ",fixed_lot_size));
}
else
{ ObjectDelete(__lin_buy_limit_1);
ObjectDelete(__lin_buy_limit_TP_1);
ObjectDelete(__lin_buy_limit_SL_1);
}
ChartRedraw();
}
if(sparam==__btn_buy_limit_TP_1 && ObjectFind(0,__lin_buy_limit_1) >=0)
{ if(ObjectFind(0,__lin_buy_limit_TP_1)!=0)
{ action=HLineCreate(0,__lin_buy_limit_TP_1,0,ObjectGetDouble(0,__lin_buy_limit_1,OBJPROP_PRICE)+price_shift,
TP_Color,4,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_buy_limit_TP_1,OBJPROP_TEXT,StringConcatenate("1st Buy Limit TP"));
}
else ObjectDelete(__lin_buy_limit_TP_1);
ChartRedraw();
}
if(sparam==__btn_buy_limit_SL_1 && ObjectFind(0,__lin_buy_limit_1) >=0)
{ if(ObjectFind(0,__lin_buy_limit_SL_1)!=0)
{ action=HLineCreate(0,__lin_buy_limit_SL_1,0,ObjectGetDouble(0,__lin_buy_limit_1,OBJPROP_PRICE)-price_shift,
SL_Color,4,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_buy_limit_SL_1,OBJPROP_TEXT,StringConcatenate("1st Buy Limit SL"));
}
else ObjectDelete(__lin_buy_limit_SL_1);
ChartRedraw();
}
if(sparam==__btn_buy_limit_2)
{ if(ObjectFind(0,__lin_buy_limit_2)!=0)
{ action=HLineCreate(0,__lin_buy_limit_2,0,Close[0]-price_shift,Limit_Order_Color,4,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_buy_limit_2,OBJPROP_TEXT,StringConcatenate("2ndt Buy Limit ",fixed_lot_size));
}
else
{
ObjectDelete(__lin_buy_limit_2);
ObjectDelete(__lin_buy_limit_TP_2);
ObjectDelete(__lin_buy_limit_SL_2);
}
ChartRedraw();
}
if(sparam==__btn_buy_limit_TP_2 && ObjectFind(0,__lin_buy_limit_2) >=0)
{ if(ObjectFind(0,__lin_buy_limit_TP_2)!=0)
{ action=HLineCreate(0,__lin_buy_limit_TP_2,0,ObjectGetDouble(0,__lin_buy_limit_2,OBJPROP_PRICE)+price_shift,
TP_Color,4,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_buy_limit_TP_2,OBJPROP_TEXT,StringConcatenate("1st Buy Limit TP"));
}
else ObjectDelete(__lin_buy_limit_TP_2);
ChartRedraw();
}
if(sparam==__btn_buy_limit_SL_2 && ObjectFind(0,__lin_buy_limit_2) >=0)
{ if(ObjectFind(0,__lin_buy_limit_SL_2)!=0)
{ action=HLineCreate(0,__lin_buy_limit_SL_2,0,ObjectGetDouble(0,__lin_buy_limit_2,OBJPROP_PRICE)-price_shift,
SL_Color,4,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_buy_limit_SL_2,OBJPROP_TEXT,StringConcatenate("1st Buy Limit SL"));
}
else ObjectDelete(__lin_buy_limit_SL_2);
ChartRedraw();
}
if(sparam==__btn_sell_limit_1)
{ if(ObjectFind(0,__lin_sell_limit_1)!=0)
{ action=HLineCreate(0,__lin_sell_limit_1,0,Close[0]+price_shift,Limit_Order_Color,4,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_sell_limit_1,OBJPROP_TEXT,StringConcatenate("1st Sell Limit ",fixed_lot_size));
}
else
{ ObjectDelete(__lin_sell_limit_1);
ObjectDelete(__lin_sell_limit_TP_1);
ObjectDelete(__lin_sell_limit_SL_1);
}
ChartRedraw();
}
if(sparam==__btn_sell_limit_TP_1 && ObjectFind(0,__lin_sell_limit_1) >=0)
{ if(ObjectFind(0,__lin_sell_limit_TP_1)!=0)
{ action=HLineCreate(0,__lin_sell_limit_TP_1,0,ObjectGetDouble(0,__lin_sell_limit_1,OBJPROP_PRICE)-price_shift,
TP_Color,4,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_sell_limit_TP_1,OBJPROP_TEXT,StringConcatenate("1st Sell Limit TP"));
}
else ObjectDelete(__lin_sell_limit_TP_1);
ChartRedraw();
}
if(sparam==__btn_sell_limit_SL_1 && ObjectFind(0,__lin_sell_limit_1) >=0)
{ if(ObjectFind(0,__lin_sell_limit_SL_1)!=0)
{ action=HLineCreate(0,__lin_sell_limit_SL_1,0,ObjectGetDouble(0,__lin_sell_limit_1,OBJPROP_PRICE)+price_shift,
SL_Color,4,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_sell_limit_SL_1,OBJPROP_TEXT,StringConcatenate("1st Sell Limit SL"));
}
else ObjectDelete(__lin_sell_limit_SL_1);
ChartRedraw();
}
if(sparam==__btn_sell_limit_2)
{ if(ObjectFind(0,__lin_sell_limit_2)!=0)
{ action=HLineCreate(0,__lin_sell_limit_2,0,Close[0]+price_shift,Limit_Order_Color,4,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_sell_limit_2,OBJPROP_TEXT,StringConcatenate("2nd Sell Limit ",fixed_lot_size));
}
else
{ ObjectDelete(__lin_sell_limit_2);
ObjectDelete(__lin_sell_limit_TP_2);
ObjectDelete(__lin_sell_limit_SL_2);
}
ChartRedraw();
}
if(sparam==__btn_sell_limit_TP_2 && ObjectFind(0,__lin_sell_limit_2) >=0)
{ if(ObjectFind(0,__lin_sell_limit_TP_2)!=0)
{ action=HLineCreate(0,__lin_sell_limit_TP_2,0,ObjectGetDouble(0,__lin_sell_limit_2,OBJPROP_PRICE)-price_shift,
TP_Color,4,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_sell_limit_TP_2,OBJPROP_TEXT,StringConcatenate("2nd Sell Limit TP"));
}
else ObjectDelete(__lin_sell_limit_TP_2);
ChartRedraw();
}
if(sparam==__btn_sell_limit_SL_2 && ObjectFind(0,__lin_sell_limit_2) >=0)
{ if(ObjectFind(0,__lin_sell_limit_SL_2)!=0)
{ action=HLineCreate(0,__lin_sell_limit_SL_2,0,ObjectGetDouble(0,__lin_sell_limit_2,OBJPROP_PRICE)+price_shift,
SL_Color,4,1,true,true,false,0);
if(action)ObjectSetString(0,__lin_sell_limit_SL_2,OBJPROP_TEXT,StringConcatenate("2nd Sell Limit SL"));
}
else ObjectDelete(__lin_sell_limit_SL_2);
ChartRedraw();
}
//-----------------------
if(sparam==__btn_Act_Lines)
{
if (ObjectGetInteger(0,__btn_Act_Lines,OBJPROP_COLOR)==clrWhite)
{
ObjectSetString(0,__btn_Act_Lines,OBJPROP_TEXT,"Lines De-Activated");
ObjectSetInteger(0,__btn_Act_Lines,OBJPROP_BGCOLOR,CadetBlue);
ObjectSetInteger(0,__btn_Act_Lines,OBJPROP_COLOR,clrBlue);
}
else
{
ObjectSetString(0,__btn_Act_Lines,OBJPROP_TEXT,"Lines Activated");
ObjectSetInteger(0,__btn_Act_Lines,OBJPROP_BGCOLOR,Purple);
ObjectSetInteger(0,__btn_Act_Lines,OBJPROP_COLOR,clrWhite);
}
}
//-----------------------
}
//--- re-draw property values
ChartRedraw();
}
void sell_basket(int magic_number,string line_name)
{ int tries=0,ord_sent=-1;
if(ObjectFind(line_name)>=0) return;
for(int j=0;j<ArraySize(pairs);j++)
{
tries=0;ord_sent=-1;
while(ord_sent<0 && tries<oper_max_tries)
{
if(dw[j]<0)
ord_sent=OrderSend(pairs[j],OP_BUY,lot_size(j),MarketInfo(pairs[j],MODE_ASK),100,0,0,"BM03",magic_number,0,clrBlue);
else
ord_sent=OrderSend(pairs[j],OP_SELL,lot_size(j),MarketInfo(pairs[j],MODE_BID),100,0,0,"BM03",magic_number,0,clrRed);
tries=tries+1;
}
}
if(ord_sent>=0)
{
if(ObjectFind(line_name)<0)
{ if(!HLineCreate(0,line_name,0,Close[0],Market_Order_Color,3,1,true,false,false,0))
{ Print(__FUNCTION__, ": failed. Error code = ",GetLastError()); return; }
ChartRedraw();
}
}
}
double lot_size(int pair)
{
double lot_sz=0;
lot_sz=fixed_lot_size*ls[pair];
return(lot_sz);
}
void buy_basket(int magic_number,string line_name)
{ int tries=0,ord_sent=-1;
if(ObjectFind(line_name)>=0) return;
for(int j=0;j<ArraySize(pairs);j++)
{
tries=0;ord_sent=-1;
while(ord_sent<0 && tries<oper_max_tries)
{
if(dw[j]<0)
ord_sent=OrderSend(pairs[j],OP_SELL,lot_size(j),MarketInfo(pairs[j],MODE_BID),100,0,0,"BM03",magic_number,0,clrRed);
else
ord_sent=OrderSend(pairs[j],OP_BUY,lot_size(j),MarketInfo(pairs[j],MODE_ASK),100,0,0,"BM03",magic_number,0,clrBlue);
tries=tries+1;
}
}
if(ord_sent>=0)
{
if(ObjectFind(line_name)<0)
{ if(!HLineCreate(0,line_name,0,Close[0],Market_Order_Color,3,1,true,false,false,0))
{ Print(__FUNCTION__, ": failed. Error code = ",GetLastError()); return; } }
ChartRedraw();
}
}
void BasketGetPairs()
{
basket_pairs = "";
string chart_comment="";
int as=0,p=0,w=0;
int k=0;
string comm[];
long currChart,prevChart=ChartFirst();
int i=1,limit=100;
while(i<limit)// We have certainly not more than 100 open charts
{
if(currChart<0) break; // Have reached the end of the chart list
chart_comment = ChartGetString(currChart,CHART_COMMENT);
StringSplit(chart_comment,u_sep,comm);
if(comm[0]==Symbol())
{
as=ArraySize(comm);
p=(as-1)/3;
ArrayResize(pairs,p);
ArrayResize(dw,p);
ArrayResize(ls,p);
for(k=0;k<p;k++)
{
pairs[k]=comm[k+1];
basket_pairs=StringConcatenate(basket_pairs," ",pairs[k]);
}
Comment(basket_pairs);
w=0;
for(k=p+1;k<as;k++)
{
dw[w]=StrToDouble(comm[k]);
w=w+1;
}
w=0;
for(k=2*p+1;k<as;k++)
{
ls[w]=StrToDouble(comm[k]);
w=w+1;
}
break;
}
prevChart=currChart;// let's save the current chart ID for the ChartNext()
currChart=ChartNext(prevChart); // Get the new chart ID by using the previous chart ID
i++;// Do not forget to increase the counter
}
}
void close_basket(int magic_number,string line_name)
{ int k=-1,j=0,tries=0,error_code=0,ord_arr[100];
bool order_found= false,OrderClosed=false;
for(j=0;j<500;j++) ord_arr[j]=0;
int ot = OrdersTotal();
for(j=0;j<ot;j++)
{
if(OrderSelect(j,SELECT_BY_POS,MODE_TRADES)==false) break;
{
if( (OrderType()==OP_SELL || OrderType()==OP_BUY) && OrderMagicNumber()==magic_number)
{ k = k + 1;
ord_arr[k]=OrderTicket();
}
}
}
for(j=0;j<=k;j++)
{ OrderClosed=false;
tries=0;
while(!OrderClosed && tries<oper_max_tries)
{
order_found=OrderSelect(ord_arr[j],SELECT_BY_TICKET,MODE_TRADES);
if(OrderType()==OP_SELL && order_found) OrderClosed=OrderClose(ord_arr[j],OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),100,Pink);
if(OrderType()==OP_BUY && order_found) OrderClosed=OrderClose(ord_arr[j],OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),100,Pink);
if(order_found && !OrderClosed)
{
error_code=GetLastError();
if(error_code!=ERR_NO_ERROR)
{ //Alert("Order Close Error: ",ErrorDescription(error_code));
Print("Order Close Error: ",ErrorDescription(error_code));
}
}
tries=tries+1;
}
}
if(OrderClosed) ObjectDelete(0,line_name);
}
//--------------------
bool HLineCreate(const long chart_ID=0, const string name="HLine", const int sub_window=0,double price=0,
const color clr=clrRed, const ENUM_LINE_STYLE style=STYLE_SOLID,const int width=1,
const bool back=false, const bool selection=true, const bool hidden=true,const long z_order=0)
{
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
ResetLastError();
if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price))
{
Print(__FUNCTION__,
": failed to create a horizontal line! Error code = ",GetLastError());
return(false);
}
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,true);
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
return(true);
}
void Create_Button(string but_name,string label,int xsize,int ysize,int corner,int xdist,int ydist,int bcolor,int fcolor)
{
if(ObjectFind(0,but_name)<0)
{
if(!ObjectCreate(0,but_name,OBJ_BUTTON,0,0,0))
{
Print(__FUNCTION__,
": failed to create the button! Error code = ",GetLastError());
return;
}
ObjectSetString(0,but_name,OBJPROP_TEXT,label);
ObjectSetInteger(0,but_name,OBJPROP_XSIZE,xsize);
ObjectSetInteger(0,but_name,OBJPROP_YSIZE,ysize);
ObjectSetInteger(0,but_name,OBJPROP_CORNER,corner);
ObjectSetInteger(0,but_name,OBJPROP_XDISTANCE,xdist);
ObjectSetInteger(0,but_name,OBJPROP_YDISTANCE,ydist);
ObjectSetInteger(0,but_name,OBJPROP_BGCOLOR,bcolor);
ObjectSetInteger(0,but_name,OBJPROP_COLOR,fcolor);
ObjectSetInteger(0,but_name,OBJPROP_FONTSIZE,9);
ObjectSetInteger(0,but_name,OBJPROP_HIDDEN,true);
//ObjectSetInteger(0,but_name,OBJPROP_BORDER_COLOR,ChartGetInteger(0,CHART_COLOR_FOREGROUND));
ObjectSetInteger(0,but_name,OBJPROP_BORDER_TYPE,BORDER_RAISED);
ChartRedraw();
}
}
void Create_Label(string lbl_name,string label,int xsize,int ysize,int corner,int xdist,int ydist,int bcolor,int fcolor,int font_size)
{
if(ObjectFind(0,lbl_name)<0)
{
if(!ObjectCreate(0,lbl_name,OBJ_LABEL,0,0,0))
{
Print(__FUNCTION__,
": failed to create the LABEL! Error code = ",GetLastError());
return;
}
ObjectSetString(0,lbl_name,OBJPROP_TEXT,label);
ObjectSetInteger(0,lbl_name,OBJPROP_XSIZE,xsize);
ObjectSetInteger(0,lbl_name,OBJPROP_YSIZE,ysize);
ObjectSetInteger(0,lbl_name,OBJPROP_CORNER,corner);
ObjectSetInteger(0,lbl_name,OBJPROP_XDISTANCE,xdist);
ObjectSetInteger(0,lbl_name,OBJPROP_YDISTANCE,ydist);
ObjectSetInteger(0,lbl_name,OBJPROP_COLOR,fcolor);
ObjectSetInteger(0,lbl_name,OBJPROP_FONTSIZE,font_size);
ChartRedraw();
}
}
void close_order(string button_name,int button_type,int magic_num,string line_name)
{
if(button_type==OP_BUY)
{
ObjectSetString(0,button_name,OBJPROP_TEXT,"Closing");
close_basket(magic_num,line_name);
ObjectSetString(0,button_name,OBJPROP_TEXT,"BUY");
}
if(button_type==OP_SELL)
{
ObjectSetString(0,button_name,OBJPROP_TEXT,"Closing");
close_basket(magic_num,line_name);
ObjectSetString(0,button_name,OBJPROP_TEXT,"SELL");
}
}
void Change_Button_Status(string button_name,int button_type,int magic_num,string line_name)
{
if(button_type==OP_BUY)
{
{ if (ObjectGetString(0,button_name,OBJPROP_TEXT)=="BUY")
{
ObjectSetString(0,button_name,OBJPROP_TEXT,"Buy...");
buy_basket(magic_num,line_name);
}
/* else
{
ObjectSetString(0,button_name,OBJPROP_TEXT,"Closing");
close_basket(magic_num,line_name);
ObjectSetString(0,button_name,OBJPROP_TEXT,"BUY");
}*/
}
}
if(button_type==OP_SELL)
{
{ if (ObjectGetString(0,button_name,OBJPROP_TEXT)=="SELL")
{
ObjectSetString(0,button_name,OBJPROP_TEXT,"Sell...");
sell_basket(magic_num,line_name);
}
/* else
{
ObjectSetString(0,button_name,OBJPROP_TEXT,"Closing");
close_basket(magic_num,line_name);
ObjectSetString(0,button_name,OBJPROP_TEXT,"SELL");
}*/
}
}
}
//---------
void Change_Button_Status_ALL(string button_name,int button_type,int magic_num,string line_name)
{
if(button_type==OP_BUY)
{
ObjectSetString(0,button_name,OBJPROP_TEXT,"Closing");
close_basket(magic_num,line_name);
ObjectSetInteger(0,button_name,OBJPROP_STATE,0);
ObjectSetString(0,button_name,OBJPROP_TEXT,"BUY");
}
if(button_type==OP_SELL)
{
ObjectSetString(0,button_name,OBJPROP_TEXT,"Closing");
close_basket(magic_num,line_name);
ObjectSetInteger(0,button_name,OBJPROP_STATE,0);
ObjectSetString(0,button_name,OBJPROP_TEXT,"SELL");
}
}
//---------
void delete_interface()
{
int obj_total=ObjectsTotal();
for(int i=obj_total-1;i>=0;i--)
{
string name=ObjectName(i);
if (name!="__btn_Market_Orders" )
if(StringSubstr(name,0,2) == "__") ObjectDelete(name);
}
return;
}
void delete_buttons()
{
int obj_total=ObjectsTotal();
for(int i=obj_total-1;i>=0;i--)
{
string name=ObjectName(i);
if (name!="__btn_Market_Orders" )
if(StringSubstr(name,0,5) == "__btn") ObjectDelete(name);
}
return;
}
void refresh()
{ int hwnd;
if(hwnd==0)
{
hwnd=WindowHandle(Symbol(),Period());
//if(hwnd!=0)
//Print("Chart window detected");
}
//--- refresh window not frequently than 1 time in 2 seconds
if(hwnd!=0)
{
PostMessageA(hwnd,WM_COMMAND,33324,0);
}
last_time=TimeCurrent();
}
double get_basket_lots()
{ int i=0;
double lot_tot=0;
for(i=0;i<OrdersTotal();i++)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
lot_tot = lot_tot + OrderLots();
}
return(lot_tot);
}
double get_new_orders_lots()
{
return(ArraySize(pairs) * fixed_lot_size);
}
double get_basket_pip_value()
{ int i=0;
double basket_pip_value=0.0;
for(i=0;i<ArraySize(pairs);i++)
{
basket_pip_value = basket_pip_value+MarketInfo(pairs[i],MODE_TICKVALUE);
/* if(dw[i]>0)
basket_pip_value = basket_pip_value+MarketInfo(pairs[i],MODE_TICKVALUE);
else
basket_pip_value = basket_pip_value+(1.0/MarketInfo(pairs[i],MODE_TICKVALUE));*/
}
return(basket_pip_value);
}
/*double get_spread()
{
double spread=0,ask=0,bid=0;
for(int i=0;i<ArraySize(pairs);i++)
{
if(dw[i]>0)
{
bid+=MarketInfo(pairs[i],MODE_BID)*dw[i];
ask+=MarketInfo(pairs[i],MODE_ASK)*dw[i];
}
else
{
ask+=MathAbs(dw[i])/MarketInfo(pairs[i],MODE_BID);
bid+=MathAbs(dw[i])/MarketInfo(pairs[i],MODE_ASK);
}
}
spread=(ask-bid)/Point;
return(spread);
}
*/
double get_order_PL(int mag_number)
{
double pl=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()==mag_number) pl=pl+OrderProfit()+OrderSwap()+OrderCommission();
}
return(pl);
}
int market_orders()
{
int mo=0,mn=0;
basket_PL=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
mn=MathFloor(OrderMagicNumber()/100);
if(mn==Magic_Number && (OrderType()==OP_BUY ||OrderType()==OP_SELL))
{ mo=mo+1;
basket_PL=basket_PL+OrderProfit()+OrderSwap()+OrderCommission();
}
}
return(mo);
}
/*double get_basket_PL()
{ int mn=0;
double pl=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
mn=MathFloor(OrderMagicNumber()/100);
if(mn==Magic_Number && (OrderType()==OP_BUY ||OrderType()==OP_SELL)) pl=pl+OrderProfit()+OrderSwap()+OrderCommission();
}
return(pl);
}
*/
void Change_PL_Color(string btn_name)
{
if( StrToInteger(ObjectGetString(0,btn_name,OBJPROP_TEXT)) <0) ObjectSetInteger(0,btn_name,OBJPROP_COLOR,clrYellow);
else ObjectSetInteger(0,btn_name,OBJPROP_COLOR,clrWhite);
}
bool order_found(int mag_num)
{
bool o_f=false;
for(int i=0;i<OrdersTotal();i++)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if(OrderMagicNumber()==mag_num) { o_f=true;break;}
}
return(o_f);
}
void update_order_PL_Display()
{
if(order_found(Magic_Number*100+01))
{ ObjectSetText(__btn_buy_basket_1,DoubleToString(get_order_PL(Magic_Number*100+01),0));
Change_PL_Color(__btn_buy_basket_1); }
if(order_found(Magic_Number*100+11))
{ ObjectSetText(__btn_sell_basket_1,DoubleToString(get_order_PL(Magic_Number*100+11),0));
Change_PL_Color(__btn_sell_basket_1); }
if(order_found(Magic_Number*100+02))
{ ObjectSetText(__btn_buy_basket_2,DoubleToString(get_order_PL(Magic_Number*100+02),0));
Change_PL_Color(__btn_buy_basket_2); }
if(order_found(Magic_Number*100+12))
{ ObjectSetText(__btn_sell_basket_2,DoubleToString(get_order_PL(Magic_Number*100+12),0));
Change_PL_Color(__btn_sell_basket_2); }
if(order_found(Magic_Number*100+03))
{ ObjectSetText(__btn_buy_basket_3,DoubleToString(get_order_PL(Magic_Number*100+03),0));
Change_PL_Color(__btn_buy_basket_3); }
if(order_found(Magic_Number*100+13))
{ ObjectSetText(__btn_sell_basket_3,DoubleToString(get_order_PL(Magic_Number*100+13),0));
Change_PL_Color(__btn_sell_basket_3); }
//-- Update Basket P/L Display -------------------------------------------------------------------------------------------
if(market_orders()>0)
{
{
ObjectSetText(__btn_close_basket,DoubleToString(basket_PL,0));
Change_PL_Color(__btn_close_basket);
}
}
}
void check_money_SL_TP()
{
if(market_orders()==0) return;
if(basket_PL>Money_TP || basket_PL<-1*Money_SL)
{
ObjectSetString(0,__btn_close_basket,OBJPROP_TEXT,"Closing...");
Change_Button_Status_ALL(__btn_buy_basket_1 ,OP_BUY ,Magic_Number*100+01,__lin_basket_Buy_1);
Change_Button_Status_ALL(__btn_sell_basket_1,OP_SELL,Magic_Number*100+11,__lin_basket_Sell_1);
Change_Button_Status_ALL(__btn_buy_basket_2 ,OP_BUY ,Magic_Number*100+02,__lin_basket_Buy_2);
Change_Button_Status_ALL(__btn_sell_basket_2,OP_SELL,Magic_Number*100+12,__lin_basket_Sell_2);
Change_Button_Status_ALL(__btn_buy_basket_3 ,OP_BUY ,Magic_Number*100+03,__lin_basket_Buy_3);
Change_Button_Status_ALL(__btn_sell_basket_3,OP_SELL,Magic_Number*100+13,__lin_basket_Sell_3);
ObjectSetInteger(0,__btn_close_basket,OBJPROP_STATE,0);
ObjectSetString(0,__btn_close_basket,OBJPROP_TEXT,"No Working Orders");
}
}
void check_SL_TP()
{
if(ObjectFind(0,__lin_basket_Buy_SL_1)==0 && Close[0]<ObjectGetDouble(0,__lin_basket_Buy_SL_1,OBJPROP_PRICE))
close_basket(Magic_Number*100+01,__lin_basket_Buy_1);
if(ObjectFind(0,__lin_basket_Buy_TP_1)==0 && Close[0]>ObjectGetDouble(0,__lin_basket_Buy_TP_1,OBJPROP_PRICE))
close_basket(Magic_Number*100+01,__lin_basket_Buy_1);
if(ObjectFind(0,__lin_basket_Buy_SL_2)==0 && Close[0]<ObjectGetDouble(0,__lin_basket_Buy_SL_2,OBJPROP_PRICE))
close_basket(Magic_Number*100+02,__lin_basket_Buy_2);
if(ObjectFind(0,__lin_basket_Buy_TP_2)==0 && Close[0]>ObjectGetDouble(0,__lin_basket_Buy_TP_2,OBJPROP_PRICE))
close_basket(Magic_Number*100+02,__lin_basket_Buy_2);
if(ObjectFind(0,__lin_basket_Buy_SL_3)==0 && Close[0]<ObjectGetDouble(0,__lin_basket_Buy_SL_3,OBJPROP_PRICE))
close_basket(Magic_Number*100+03,__lin_basket_Buy_3);
if(ObjectFind(0,__lin_basket_Buy_TP_3)==0 && Close[0]>ObjectGetDouble(0,__lin_basket_Buy_TP_3,OBJPROP_PRICE))
close_basket(Magic_Number*100+03,__lin_basket_Buy_3);
if(ObjectFind(0,__lin_basket_Sell_SL_1)==0 && Close[0]>ObjectGetDouble(0,__lin_basket_Sell_SL_1,OBJPROP_PRICE))
close_basket(Magic_Number*100+11,__lin_basket_Sell_1);
if(ObjectFind(0,__lin_basket_Sell_TP_1)==0 && Close[0]<ObjectGetDouble(0,__lin_basket_Sell_TP_1,OBJPROP_PRICE))
close_basket(Magic_Number*100+11,__lin_basket_Sell_1);
if(ObjectFind(0,__lin_basket_Sell_SL_2)==0 && Close[0]>ObjectGetDouble(0,__lin_basket_Sell_SL_2,OBJPROP_PRICE))
close_basket(Magic_Number*100+12,__lin_basket_Sell_2);
if(ObjectFind(0,__lin_basket_Sell_TP_2)==0 && Close[0]<ObjectGetDouble(0,__lin_basket_Sell_TP_2,OBJPROP_PRICE))
close_basket(Magic_Number*100+12,__lin_basket_Sell_2);
if(ObjectFind(0,__lin_basket_Sell_SL_3)==0 && Close[0]>ObjectGetDouble(0,__lin_basket_Sell_SL_3,OBJPROP_PRICE))
close_basket(Magic_Number*100+13,__lin_basket_Sell_3);
if(ObjectFind(0,__lin_basket_Sell_TP_3)==0 && Close[0]<ObjectGetDouble(0,__lin_basket_Sell_TP_3,OBJPROP_PRICE))
close_basket(Magic_Number*100+13,__lin_basket_Sell_3);
}
void clear_lines()
{
if (!order_found(Magic_Number*100+01) && ObjectFind(0,__lin_basket_Buy_1 )>=0)
{ ObjectDelete(0,__lin_basket_Buy_1); ObjectDelete(0,__lin_basket_Buy_SL_1);ObjectDelete(0,__lin_basket_Buy_TP_1); }
if (!order_found(Magic_Number*100+02) && ObjectFind(0,__lin_basket_Buy_2 )>=0)
{ ObjectDelete(0,__lin_basket_Buy_2); ObjectDelete(0,__lin_basket_Buy_SL_2);ObjectDelete(0,__lin_basket_Buy_TP_2); }
if (!order_found(Magic_Number*100+03) && ObjectFind(0,__lin_basket_Buy_3 )>=0)
{ ObjectDelete(0,__lin_basket_Buy_3); ObjectDelete(0,__lin_basket_Buy_SL_3);ObjectDelete(0,__lin_basket_Buy_TP_3); }
if (!order_found(Magic_Number*100+11) && ObjectFind(0,__lin_basket_Sell_1)>=0)
{ ObjectDelete(0,__lin_basket_Sell_1); ObjectDelete(0,__lin_basket_Sell_SL_1);ObjectDelete(0,__lin_basket_Sell_TP_1); }
if (!order_found(Magic_Number*100+12) && ObjectFind(0,__lin_basket_Sell_2)>=0)
{ ObjectDelete(0,__lin_basket_Sell_2); ObjectDelete(0,__lin_basket_Sell_SL_2);ObjectDelete(0,__lin_basket_Sell_TP_2); }
if (!order_found(Magic_Number*100+13) && ObjectFind(0,__lin_basket_Sell_3)>=0)
{ ObjectDelete(0,__lin_basket_Sell_3); ObjectDelete(0,__lin_basket_Sell_SL_3);ObjectDelete(0,__lin_basket_Sell_TP_3); }
if (!order_found(Magic_Number*100+21) && ObjectFind(0,__lin_buy_limit_1 )>=0)
{ ObjectDelete(0,__lin_buy_limit_1); ObjectDelete(0,__lin_buy_limit_SL_1);ObjectDelete(0,__lin_buy_limit_TP_1); }
if (!order_found(Magic_Number*100+22) && ObjectFind(0,__lin_buy_limit_2 )>=0)
{ ObjectDelete(0,__lin_buy_limit_2); ObjectDelete(0,__lin_buy_limit_SL_2);ObjectDelete(0,__lin_buy_limit_TP_2); }
if (!order_found(Magic_Number*100+41) && ObjectFind(0,__lin_buy_stop_1 )>=0)
{ ObjectDelete(0,__lin_buy_stop_1); ObjectDelete(0,__lin_buy_stop_SL_1);ObjectDelete(0,__lin_buy_stop_SL_1); }
if (!order_found(Magic_Number*100+42) && ObjectFind(0,__lin_buy_stop_2 )>=0)
{ ObjectDelete(0,__lin_buy_stop_2); ObjectDelete(0,__lin_buy_stop_SL_2);ObjectDelete(0,__lin_buy_stop_SL_2); }
if (!order_found(Magic_Number*100+31) && ObjectFind(0,__lin_sell_limit_1 )>=0)
{ ObjectDelete(0,__lin_sell_limit_1); ObjectDelete(0,__lin_sell_limit_SL_1);ObjectDelete(0,__lin_sell_limit_TP_1); }
if (!order_found(Magic_Number*100+32) && ObjectFind(0,__lin_sell_limit_2 )>=0)
{ ObjectDelete(0,__lin_sell_limit_2); ObjectDelete(0,__lin_sell_limit_SL_2);ObjectDelete(0,__lin_sell_limit_TP_2); }
if (!order_found(Magic_Number*100+51) && ObjectFind(0,__lin_sell_stop_1 )>=0)
{ ObjectDelete(0,__lin_sell_stop_1); ObjectDelete(0,__lin_sell_stop_SL_1);ObjectDelete(0,__lin_sell_stop_TP_1); }
if (!order_found(Magic_Number*100+52) && ObjectFind(0,__lin_sell_stop_2 )>=0)
{ ObjectDelete(0,__lin_sell_stop_2); ObjectDelete(0,__lin_sell_stop_SL_2);ObjectDelete(0,__lin_sell_stop_TP_2); }
}
void check_Pending_Orders()
{
string line_name="x",button_name="x",line_TP,line_SL;
int mag_num=0;
//--- 1st buy stop ---
if(ObjectFind(0,__lin_buy_stop_1)>=0)
{ if(Close[0]>ObjectGetDouble(0,__lin_buy_stop_1,OBJPROP_PRICE))
{
if(ObjectFind(0,__lin_basket_Buy_1)<0)
{ line_name = __lin_basket_Buy_1;
button_name=__btn_buy_basket_1;
mag_num=Magic_Number*100+01;
line_TP=__lin_basket_Buy_TP_1;
line_SL=__lin_basket_Buy_SL_1;
}
else
{ if(ObjectFind(0,__lin_basket_Buy_2)<0)
{ line_name = __lin_basket_Buy_2;
button_name=__btn_buy_basket_2;
mag_num=Magic_Number*100+02;
line_TP=__lin_basket_Buy_TP_2;
line_SL=__lin_basket_Buy_SL_2;
}
else
{
if(ObjectFind(0,__lin_basket_Buy_3)<0)
{ line_name = __lin_basket_Buy_3;
button_name=__btn_buy_basket_3;
mag_num=Magic_Number*100+03;
line_TP=__lin_basket_Buy_TP_3;
line_SL=__lin_basket_Buy_SL_3;
}
}
}
if(line_name=="x")
{
Alert("Can Not Activate 1st Buy Stop because of Max buy Orders");
}
else
{
Change_Button_Status(button_name ,OP_BUY ,mag_num,line_name);
if(ObjectFind(0,__lin_buy_stop_TP_1) >=0)
HLineCreate(0,line_TP,0,ObjectGetDouble(0,__lin_buy_stop_TP_1,OBJPROP_PRICE),TP_Color,1,1,true,true,false,0);
if(ObjectFind(0,__lin_buy_stop_SL_1) >=0)
HLineCreate(0,line_SL,0,ObjectGetDouble(0,__lin_buy_stop_SL_1,OBJPROP_PRICE),SL_Color,1,1,true,true,false,0);
ObjectDelete(0,__lin_buy_stop_1);
ObjectDelete(0,__lin_buy_stop_TP_1);
ObjectDelete(0,__lin_buy_stop_SL_1);
}
}
}
//--- 2nd buy stop ---
if(ObjectFind(0,__lin_buy_stop_2)>=0)
{ if(Close[0]>ObjectGetDouble(0,__lin_buy_stop_2,OBJPROP_PRICE))
{
if(ObjectFind(0,__lin_basket_Buy_1)<0)
{ line_name = __lin_basket_Buy_1;
button_name=__btn_buy_basket_1;
mag_num=Magic_Number*100+01;
line_TP=__lin_basket_Buy_TP_1;
line_SL=__lin_basket_Buy_SL_1;
}
else
{ if(ObjectFind(0,__lin_basket_Buy_2)<0)
{ line_name = __lin_basket_Buy_2;
button_name=__btn_buy_basket_2;
mag_num=Magic_Number*100+02;
line_TP=__lin_basket_Buy_TP_2;
line_SL=__lin_basket_Buy_SL_2;
}
else
{
if(ObjectFind(0,__lin_basket_Buy_3)<0)
{ line_name = __lin_basket_Buy_3;
button_name=__btn_buy_basket_3;
mag_num=Magic_Number*100+03;
line_TP=__lin_basket_Buy_TP_3;
line_SL=__lin_basket_Buy_SL_3;
}
}
}
if(line_name=="x")
{
Alert("Can Not Activate 1st Buy Stop because of Max buy Orders");
}
else
{
Change_Button_Status(button_name ,OP_BUY ,mag_num,line_name);
if(ObjectFind(0,__lin_buy_stop_TP_2) >=0)
HLineCreate(0,line_TP,0,ObjectGetDouble(0,__lin_buy_stop_TP_2,OBJPROP_PRICE),TP_Color,1,1,true,true,false,0);
if(ObjectFind(0,__lin_buy_stop_SL_2) >=0)
HLineCreate(0,line_SL,0,ObjectGetDouble(0,__lin_buy_stop_SL_2,OBJPROP_PRICE),SL_Color,1,1,true,true,false,0);
ObjectDelete(0,__lin_buy_stop_2);
ObjectDelete(0,__lin_buy_stop_TP_2);
ObjectDelete(0,__lin_buy_stop_SL_2);
}
}
}
//---------------------
//--- 1st buy limit ---
if(ObjectFind(0,__lin_buy_limit_1)>=0)
{ if(Close[0]<ObjectGetDouble(0,__lin_buy_limit_1,OBJPROP_PRICE))
{
if(ObjectFind(0,__lin_basket_Buy_1)<0)
{ line_name = __lin_basket_Buy_1;
button_name=__btn_buy_basket_1;
mag_num=Magic_Number*100+01;
line_TP=__lin_basket_Buy_TP_1;
line_SL=__lin_basket_Buy_SL_1;
}
else
{ if(ObjectFind(0,__lin_basket_Buy_2)<0)
{ line_name = __lin_basket_Buy_2;
button_name=__btn_buy_basket_2;
mag_num=Magic_Number*100+02;
line_TP=__lin_basket_Buy_TP_2;
line_SL=__lin_basket_Buy_SL_2;
}
else
{
if(ObjectFind(0,__lin_basket_Buy_3)<0)
{ line_name = __lin_basket_Buy_3;
button_name=__btn_buy_basket_3;
mag_num=Magic_Number*100+03;
line_TP=__lin_basket_Buy_TP_3;
line_SL=__lin_basket_Buy_SL_3;
}
}
}
if(line_name=="x")
{
Alert("Can Not Activate 1st Buy limit because of Max buy Orders");
}
else
{
Change_Button_Status(button_name ,OP_BUY ,mag_num,line_name);
if(ObjectFind(0,__lin_buy_limit_TP_1) >=0)
HLineCreate(0,line_TP,0,ObjectGetDouble(0,__lin_buy_limit_TP_1,OBJPROP_PRICE),TP_Color,1,1,true,true,false,0);
if(ObjectFind(0,__lin_buy_limit_SL_1) >=0)
HLineCreate(0,line_SL,0,ObjectGetDouble(0,__lin_buy_limit_SL_1,OBJPROP_PRICE),SL_Color,1,1,true,true,false,0);
ObjectDelete(0,__lin_buy_limit_1);
ObjectDelete(0,__lin_buy_limit_TP_1);
ObjectDelete(0,__lin_buy_limit_SL_1);
}
}
}
//--- 2nd buy limit ---
if(ObjectFind(0,__lin_buy_limit_2)>=0)
{ if(Close[0]<ObjectGetDouble(0,__lin_buy_limit_2,OBJPROP_PRICE))
{
if(ObjectFind(0,__lin_basket_Buy_1)<0)
{ line_name = __lin_basket_Buy_1;
button_name=__btn_buy_basket_1;
mag_num=Magic_Number*100+01;
line_TP=__lin_basket_Buy_TP_1;
line_SL=__lin_basket_Buy_SL_1;
}
else
{ if(ObjectFind(0,__lin_basket_Buy_2)<0)
{ line_name = __lin_basket_Buy_2;
button_name=__btn_buy_basket_2;
mag_num=Magic_Number*100+02;
line_TP=__lin_basket_Buy_TP_2;
line_SL=__lin_basket_Buy_SL_2;
}
else
{
if(ObjectFind(0,__lin_basket_Buy_3)<0)
{ line_name = __lin_basket_Buy_3;
button_name=__btn_buy_basket_3;
mag_num=Magic_Number*100+03;
line_TP=__lin_basket_Buy_TP_3;
line_SL=__lin_basket_Buy_SL_3;
}
}
}
if(line_name=="x")
{
Alert("Can Not Activate 1st Buy limit because of Max buy Orders");
}
else
{
Change_Button_Status(button_name ,OP_BUY ,mag_num,line_name);
if(ObjectFind(0,__lin_buy_limit_TP_2) >=0)
HLineCreate(0,line_TP,0,ObjectGetDouble(0,__lin_buy_limit_TP_2,OBJPROP_PRICE),TP_Color,1,1,true,true,false,0);
if(ObjectFind(0,__lin_buy_limit_SL_2) >=0)
HLineCreate(0,line_SL,0,ObjectGetDouble(0,__lin_buy_limit_SL_2,OBJPROP_PRICE),SL_Color,1,1,true,true,false,0);
ObjectDelete(0,__lin_buy_limit_2);
ObjectDelete(0,__lin_buy_limit_TP_2);
ObjectDelete(0,__lin_buy_limit_SL_2);
}
}
}
//---------------------
//--- 1st sell stop ---
if(ObjectFind(0,__lin_sell_stop_1)>=0)
{ if(Close[0]<ObjectGetDouble(0,__lin_sell_stop_1,OBJPROP_PRICE))
{
if(ObjectFind(0,__lin_basket_Sell_1)<0)
{ line_name = __lin_basket_Sell_1;
button_name=__btn_sell_basket_1;
mag_num=Magic_Number*100+11;
line_TP=__lin_basket_Sell_TP_1;
line_SL=__lin_basket_Sell_SL_1;
}
else
{ if(ObjectFind(0,__lin_basket_Sell_2)<0)
{ line_name = __lin_basket_Sell_2;
button_name=__btn_sell_basket_2;
mag_num=Magic_Number*100+12;
line_TP=__lin_basket_Sell_TP_2;
line_SL=__lin_basket_Sell_SL_2;
}
else
{
if(ObjectFind(0,__lin_basket_Sell_3)<0)
{ line_name = __lin_basket_Sell_3;
button_name=__btn_sell_basket_3;
mag_num=Magic_Number*100+13;
line_TP=__lin_basket_Sell_TP_3;
line_SL=__lin_basket_Sell_SL_3;
}
}
}
if(line_name=="x")
{
Alert("Can Not Activate 1st sell Stop because of Max sell Orders");
}
else
{
Change_Button_Status(button_name ,OP_SELL ,mag_num,line_name);
if(ObjectFind(0,__lin_sell_stop_TP_1) >=0)
HLineCreate(0,line_TP,0,ObjectGetDouble(0,__lin_sell_stop_TP_1,OBJPROP_PRICE),TP_Color,1,1,true,true,false,0);
if(ObjectFind(0,__lin_sell_stop_SL_1) >=0)
HLineCreate(0,line_SL,0,ObjectGetDouble(0,__lin_sell_stop_SL_1,OBJPROP_PRICE),SL_Color,1,1,true,true,false,0);
ObjectDelete(0,__lin_sell_stop_1);
ObjectDelete(0,__lin_sell_stop_TP_1);
ObjectDelete(0,__lin_sell_stop_SL_1);
}
}
}
//--- 2nd sell stop ---
if(ObjectFind(0,__lin_sell_stop_2)>=0)
{ if(Close[0]<ObjectGetDouble(0,__lin_sell_stop_2,OBJPROP_PRICE))
{
if(ObjectFind(0,__lin_basket_Sell_1)<0)
{ line_name = __lin_basket_Sell_1;
button_name=__btn_sell_basket_1;
mag_num=Magic_Number*100+11;
line_TP=__lin_basket_Sell_TP_1;
line_SL=__lin_basket_Sell_SL_1;
}
else
{ if(ObjectFind(0,__lin_basket_Sell_2)<0)
{ line_name = __lin_basket_Sell_2;
button_name=__btn_sell_basket_2;
mag_num=Magic_Number*100+12;
line_TP=__lin_basket_Sell_TP_2;
line_SL=__lin_basket_Sell_SL_2;
}
else
{
if(ObjectFind(0,__lin_basket_Sell_3)<0)
{ line_name = __lin_basket_Sell_3;
button_name=__btn_sell_basket_3;
mag_num=Magic_Number*100+13;
line_TP=__lin_basket_Sell_TP_3;
line_SL=__lin_basket_Sell_SL_3;
}
}
}
if(line_name=="x")
{
Alert("Can Not Activate 1st sell Stop because of Max sell Orders");
}
else
{
Change_Button_Status(button_name ,OP_SELL ,mag_num,line_name);
if(ObjectFind(0,__lin_sell_stop_TP_2) >=0)
HLineCreate(0,line_TP,0,ObjectGetDouble(0,__lin_sell_stop_TP_2,OBJPROP_PRICE),TP_Color,1,1,true,true,false,0);
if(ObjectFind(0,__lin_sell_stop_SL_2) >=0)
HLineCreate(0,line_SL,0,ObjectGetDouble(0,__lin_sell_stop_SL_2,OBJPROP_PRICE),SL_Color,1,1,true,true,false,0);
ObjectDelete(0,__lin_sell_stop_2);
ObjectDelete(0,__lin_sell_stop_TP_2);
ObjectDelete(0,__lin_sell_stop_SL_2);
}
}
}
//---------------------
//--- 1st sell limit ---
if(ObjectFind(0,__lin_sell_limit_1)>=0)
{ if(Close[0]>ObjectGetDouble(0,__lin_sell_limit_1,OBJPROP_PRICE))
{
if(ObjectFind(0,__lin_basket_Sell_1)<0)
{ line_name = __lin_basket_Sell_1;
button_name=__btn_sell_basket_1;
mag_num=Magic_Number*100+11;
line_TP=__lin_basket_Sell_TP_1;
line_SL=__lin_basket_Sell_SL_1;
}
else
{ if(ObjectFind(0,__lin_basket_Sell_2)<0)
{ line_name = __lin_basket_Sell_2;
button_name=__btn_sell_basket_2;
mag_num=Magic_Number*100+12;
line_TP=__lin_basket_Sell_TP_2;
line_SL=__lin_basket_Sell_SL_2;
}
else
{
if(ObjectFind(0,__lin_basket_Sell_3)<0)
{ line_name = __lin_basket_Sell_3;
button_name=__btn_sell_basket_3;
mag_num=Magic_Number*100+13;
line_TP=__lin_basket_Sell_TP_3;
line_SL=__lin_basket_Sell_SL_3;
}
}
}
if(line_name=="x")
{
Alert("Can Not Activate 1st sell limit because of Max sell Orders");
}
else
{
Change_Button_Status(button_name ,OP_SELL ,mag_num,line_name);
if(ObjectFind(0,__lin_sell_limit_TP_1) >=0)
HLineCreate(0,line_TP,0,ObjectGetDouble(0,__lin_sell_limit_TP_1,OBJPROP_PRICE),TP_Color,1,1,true,true,false,0);
if(ObjectFind(0,__lin_sell_limit_SL_1) >=0)
HLineCreate(0,line_SL,0,ObjectGetDouble(0,__lin_sell_limit_SL_1,OBJPROP_PRICE),SL_Color,1,1,true,true,false,0);
ObjectDelete(0,__lin_sell_limit_1);
ObjectDelete(0,__lin_sell_limit_TP_1);
ObjectDelete(0,__lin_sell_limit_SL_1);
}
}
}
//--- 2nd sell limit ---
if(ObjectFind(0,__lin_sell_limit_2)>=0)
{ if(Close[0]>ObjectGetDouble(0,__lin_sell_limit_2,OBJPROP_PRICE))
{
if(ObjectFind(0,__lin_basket_Sell_1)<0)
{ line_name = __lin_basket_Sell_1;
button_name=__btn_sell_basket_1;
mag_num=Magic_Number*100+11;
line_TP=__lin_basket_Sell_TP_1;
line_SL=__lin_basket_Sell_SL_1;
}
else
{ if(ObjectFind(0,__lin_basket_Sell_2)<0)
{ line_name = __lin_basket_Sell_2;
button_name=__btn_sell_basket_2;
mag_num=Magic_Number*100+12;
line_TP=__lin_basket_Sell_TP_2;
line_SL=__lin_basket_Sell_SL_2;
}
else
{
if(ObjectFind(0,__lin_basket_Sell_3)<0)
{ line_name = __lin_basket_Sell_3;
button_name=__btn_sell_basket_3;
mag_num=Magic_Number*100+13;
line_TP=__lin_basket_Sell_TP_3;
line_SL=__lin_basket_Sell_SL_3;
}
}
}
if(line_name=="x")
{
Alert("Can Not Activate 1st sell limit because of Max sell Orders");
}
else
{
Change_Button_Status(button_name ,OP_SELL ,mag_num,line_name);
if(ObjectFind(0,__lin_sell_limit_TP_2) >=0)
HLineCreate(0,line_TP,0,ObjectGetDouble(0,__lin_sell_limit_TP_2,OBJPROP_PRICE),TP_Color,1,1,true,true,false,0);
if(ObjectFind(0,__lin_sell_limit_SL_2) >=0)
HLineCreate(0,line_SL,0,ObjectGetDouble(0,__lin_sell_limit_SL_2,OBJPROP_PRICE),SL_Color,1,1,true,true,false,0);
ObjectDelete(0,__lin_sell_limit_2);
ObjectDelete(0,__lin_sell_limit_TP_2);
ObjectDelete(0,__lin_sell_limit_SL_2);
}
}
}
}