strategyschedule.mq4
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «strategyschedule.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
StrategySchedule — торговый советник для MetaTrader 4, предоставляющий графический интерфейс прямо на графике для ручного управления торговыми операциями. На чарте создаются кнопки для размещения рыночных ордеров BUY и SELL, отложенных ордеров BUY LIMIT, BUY STOP, SELL LIMIT и SELL STOP, а также кнопки для удаления ордеров и закрытия всех позиций. Рядом располагаются поля ввода для параметров Take Profit, Stop Loss, расстояния и лота.
Советник использует три отдельных магических числа (Magic1, Magic2, Magic3) для различения обычных, стоповых и лимитных ордеров, что позволяет управлять ими независимо. Встроенная функция AdviserRegistration отображает на графике актуальную информацию об аккаунте: баланс, эквити, свободный маржин, прибыль, а также количество открытых BUY и SELL позиций.
Обработка событий реализована через OnChartEvent, который отслеживает нажатия кнопок на графике и запускает соответствующие торговые операции через класс Launch с использованием OrderSend. Класс Delete обеспечивает удаление отложенных ордеров по указанному магическому числу. При каждом тике OnTick обновляет отображение торговой информации.
Настройки программы
| Настройка | Описание |
|---|---|
| Slippage | Проскальзывание — Допустимое проскальзывание в пунктах при выполнении торговых операций. |
| Обычные ордера (Magic1) | Обычные ордера — Магическое число для обычных рыночных ордеров BUY и SELL. |
| Стоповые ордера (Magic2) | Стоповые ордера — Магическое число для стоповых отложенных ордеров BUY STOP и SELL STOP. |
| Лимитные ордера (Magic3) | Лимитные ордера — Магическое число для лимитных отложенных ордеров BUY LIMIT и SELL LIMIT. |
| Points | Цвет заливки — Цвет заливки (фона) объектов ввода и меток на графике. |
| Edge | Цвет границы — Цвет границ объектов ввода и меток на графике. |
| Colour | Цвет текста — Цвет текста в полях ввода и информационных меток на графике. |
Поиск по коду файла
#property version "1.00"
#property strict
extern int Slippage = 50;
extern int Magic1 = 123111;// Обычные ордера
extern int Magic2 = 124111;// Стоповые ордера
extern int Magic3 = 125111;// Лимитные ордера
extern color Points = clrBlack;
extern color Edge = clrDarkBlue;
extern color Colour = clrWhite;
string ID;
string AC,Font2="Balans",Font = "Times New Roman";
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
ObjectsDeleteAll();
}
void OnTick()
{
// код доступен только после оплаты
}
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
Launch lau;
Delete del;
AdviserRegistration();
double tpb;// = TPBuy;
double tpblimit;// = TPBuyLimit;
double tpbstop;// = TPBuyStop;
double tps;// = TPSell;
double tpslimit;// = TPSellLimit;
double tpsstop;// = TPSellStop;
double tpgbs;// = TPBuyGrid;
double tpgbl;// = TPBuyGrid;
double slb;// = TPBuy;
double slblimit;// = TPBuyLimit;
double slbstop;// = TPBuyStop;
double sls;// = TPSell;
double slslimit;// = TPSellLimit;
double slsstop;// = TPSellStop;
double slgss;// = TPBuyGrid;
double slgsl;// = TPBuyGrid;
double odbuylimit;// = OpeningDistanceBuyLimit;
double odbuystop;// = OpeningDistanceBuyStop;
double odselllimit;// = OpeningDistanceSellLimit;
double odsellstop;// = OpeningDistanceSellStop;
int slip=Slippage;
double sp1=double(ObjectGetString(0,"SE1",OBJPROP_TEXT));//tp
double sp2=double(ObjectGetString(0,"SE2",OBJPROP_TEXT));//sl
double sp3=double(ObjectGetString(0,"SE3",OBJPROP_TEXT));//dis
double sp4=double(ObjectGetString(0,"SE4",OBJPROP_TEXT));//setka
double sp5=double(ObjectGetString(0,"SE5",OBJPROP_TEXT));//количество
double sp6=double(ObjectGetString(0,"SE6",OBJPROP_TEXT));//lot
if(id==CHARTEVENT_OBJECT_CLICK)
{
string clickedChartObject=sparam;
if(clickedChartObject=="A")
{
tpb=sp1;
slb=sp2;
if(!sp2 && !sp1)
int ticket=lau.Buy(sp6,slip,Magic1);
else
if(!sp1)
int ticket=lau.sBuy(sp6,slip,slb,Magic1);
else
if(!sp2)
int ticket=lau.Buy(sp6,slip,tpb,Magic1);
else
int ticket=lau.Buy(sp6,slip,slb,tpb,Magic1);
}
if(clickedChartObject=="B")
{
tps=sp1;
sls=sp2;
if(!sp2 && !sp1)
int ticket=lau.Sell(sp6,slip,Magic2);
else
if(!sp1)
int ticket=lau.sSell(sp6,slip,sls,Magic1);
else
if(!sp2)
int ticket=lau.Sell(sp6,slip,tps,Magic1);
else
int ticket=lau.Sell(sp6,slip,sls,tps,Magic1);
}
if(clickedChartObject=="C")
{
tpbstop=sp1;
odbuystop=sp3;
slbstop=sp2;
double size=sp3;
int i=0,ticket;
bool puskt=false;
bool pusks=false;
if(!sp2)
puskt=true;
if(!sp1)
pusks=true;
tpgbs=sp1;//+size;
tpgbl=sp1+(size*2);
slgss=sp2-size;//(size*2);
slgsl=sp2;
if(sp5>0 && pusks==true && puskt==true)
while(i<sp5)
{
ticket=lau.BuyStop(
sp6,size,slip,Magic2);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
else
if(pusks==true)
while(i<sp5)
{
ticket=lau.sBuyStop(
sp6,size,slip,slgss,Magic2);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
else
if(puskt==true)
while(i<sp5)
{
ticket=lau.BuyStop(
sp6,size,slip,tpgbs,Magic2);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
else
while(i<sp5)
{
ticket=lau.BuyStop(
sp6,size,slip,slgss,tpgbs,Magic2);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
if(!sp5 && !sp2 && !sp1)
int tick=lau.BuyStop(
sp6,odbuystop,slip,Magic2);
else
if(!sp1 && !sp5)
int tick=lau.sBuyStop(
sp6,odbuystop,slip,slbstop,Magic2);
else
if(!sp2 && ! sp5)
int tick=lau.BuyStop(
sp6,odbuystop,slip,tpbstop,Magic2);
else
if(!sp5)
int tick=lau.BuyStop(
sp6,odbuystop,slip,slbstop,tpbstop,Magic2);
}
if(clickedChartObject=="D")
{
tpsstop=sp1;
odsellstop=sp3;
slsstop=sp2;
double size=sp3;
int i=0,ticket;
bool puskt=false;
bool pusks=false;
if(!sp2)
puskt=true;
if(!sp1)
pusks=true;
tpgbs=sp1;
tpgbl=sp1+(size*2);
slgss=sp2-size;//+(size*2);
slgsl=sp2;
if(sp5>0 && pusks==true && puskt==true)
while(i<sp5)
{
ticket=lau.SellStop(
sp6,size,slip,Magic2);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
else
if(pusks==true)
while(i<sp5)
{
ticket=lau.sSellStop(
sp6,size,slip,slgss,Magic2);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
else
if(puskt==true)
while(i<sp5)
{
ticket=lau.SellStop(
sp6,size,slip,tpgbs,Magic2);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
else
while(i<sp5)
{
ticket=lau.SellStop(
sp6,size,slip,slgss,tpgbs,Magic2);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
if(!sp5 && !sp2 && !sp1)
int tick=lau.SellStop(
sp6,odsellstop,slip,Magic2);
else
if(!sp1 && !sp5)
int tick=lau.sSellStop(
sp6,odsellstop,slip,slsstop,Magic2);
else
if(!sp2 && !sp5)
int tick=lau.SellStop(
sp6,odsellstop,slip,tpsstop,Magic2);
else
if(!sp5)
int tick=lau.SellStop(
sp6,odsellstop,slip,slsstop,tpsstop,Magic2);
}
if(clickedChartObject=="E")
{
tpblimit=sp1;
odbuylimit=sp3;
slblimit=sp2;
double size=sp3;
int i=0,ticket;
bool puskt=false;
bool pusks=false;
if(!sp2)
puskt=true;
if(!sp1)
pusks=true;
tpgbs=sp1;
tpgbl=sp1-size-(sp4/2);//+(size*2);
slgss=sp2+(size*2);
slgsl=sp2;
if(sp5>0 && pusks==true && puskt==true)
while(i<sp5)
{
ticket=lau.BuyLimit(
sp6,size,slip,Magic3);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
else
if(pusks==true)
while(i<sp5)
{
ticket=lau.sBuyLimit(
sp6,size,slip,slgsl,Magic3);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
else
if(puskt==true)
while(i<sp5)
{
ticket=lau.BuyLimit(
sp6,size,slip,tpgbl,Magic3);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
else
while(i<sp5)
{
ticket=lau.BuyLimit(
sp6,size,slip,slgsl,tpgbl,Magic3);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
if(!sp5 && !sp2 && !sp1)
int tick=lau.BuyLimit(
sp6,odbuylimit,slip,Magic3);
else
if(!sp1 && !sp5)
int tick=lau.sBuyLimit(
sp6,odbuylimit,slip,slblimit,Magic3);
else
if(!sp2 && !sp5)
int tick=lau.BuyLimit(
sp6,odbuylimit,slip,tpblimit,Magic3);
else
if(!sp5)
int tick=lau.BuyLimit(
sp6,odbuylimit,slip,slblimit,tpblimit,Magic3);
}
if(clickedChartObject=="F")
{
tpslimit=sp1;
odselllimit=sp3;
slslimit=sp2;
double size=sp3;
int i=0,ticket;
bool puskt=false;
bool pusks=false;
if(!sp2)
puskt=true;
if(!sp1)
pusks=true;
tpgbs=sp1;
tpgbl=sp1-size-(sp4/2);//+(size*2);
slgss=sp2+(size*2);
slgsl=sp2;
if(sp5>0 && pusks==true && puskt==true)
while(i<sp5)
{
ticket=lau.SellLimit(
sp6,size,slip,Magic3);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
else
if(pusks==true)
while(i<sp5)
{
ticket=lau.sSellLimit(
sp6,size,slip,slgsl,Magic3);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
else
if(puskt==true)
while(i<sp5)
{
ticket=lau.SellLimit(
sp6,size,slip,tpgbl,Magic3);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
else
while(i<sp5)
{
ticket=lau.SellLimit(
sp6,size,slip,slgsl,tpgbl,Magic3);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
if(!sp5 && !sp2 && !sp1)
int tick=lau.SellLimit(
sp6,odselllimit,slip,Magic3);
else
if(!sp1 && !sp5)
int tick=lau.sSellLimit(
sp6,odselllimit,slip,slslimit,Magic3);
else
if(!sp2 && !sp5)
int tick=lau.SellLimit(
sp6,odselllimit,slip,tpslimit,Magic3);
else
if(!sp5)
int tick=lau.SellLimit(
sp6,odselllimit,slip,slslimit,tpslimit,Magic3);
}
if(clickedChartObject=="P1")
{
double size=sp3;
int i=0,ticket;
bool puskt=false;
bool pusks=false;
if(!sp2)
puskt=true;
if(!sp1)
pusks=true;
tpgbs=sp1;
tpgbl=sp1+(size*2);
slgss=sp2+(size*2);
slgsl=sp2;
if(pusks==true && puskt==true)
while(i<sp5)
{
ticket=lau.BuyStop(
sp6,size,slip,Magic2);
ticket=lau.BuyLimit(
sp6,size,slip,Magic3);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
else
if(pusks==true)
while(i<sp5)
{
ticket=lau.sBuyStop(
sp6,size,slip,slgss,Magic2);
ticket=lau.sBuyLimit(
sp6,size,slip,slgsl,Magic3);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
else
if(puskt==true)
while(i<sp5)
{
ticket=lau.BuyStop(
sp6,size,slip,tpgbs,Magic2);
ticket=lau.BuyLimit(
sp6,size,slip,tpgbl,Magic3);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
else
while(i<sp5)
{
ticket=lau.BuyStop(
sp6,size,slip,slgss,tpgbs,Magic2);
ticket=lau.BuyLimit(
sp6,size,slip,slgsl,tpgbl,Magic3);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
}
if(clickedChartObject=="P2")
{
double size=sp3;
int i=0,ticket;
bool puskt=false;
bool pusks=false;
if(!sp2)
puskt=true;
if(!sp1)
pusks=true;
tpgbs=sp1;
tpgbl=sp1+(size*2);
slgss=sp2+(size*2);
slgsl=sp2;
if(pusks==true && puskt==true)
while(i<sp5)
{
ticket=lau.SellStop(
sp6,size,slip,Magic2);
ticket=lau.SellLimit(
sp6,size,slip,Magic3);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
else
if(pusks==true)
while(i<sp5)
{
ticket=lau.sSellStop(
sp6,size,slip,slgss,Magic2);
ticket=lau.sSellLimit(
sp6,size,slip,slgsl,Magic3);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
else
if(puskt==true)
while(i<sp5)
{
ticket=lau.SellStop(
sp6,size,slip,tpgbs,Magic2);
ticket=lau.SellLimit(
sp6,size,slip,tpgbl,Magic3);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
else
while(i<sp5)
{
ticket=lau.SellStop(
sp6,size,slip,slgss,tpgbs,Magic2);
ticket=lau.SellLimit(
sp6,size,slip,slgsl,tpgbl,Magic3);
tpgbs=tpgbs-sp4;
tpgbl=tpgbl+sp4;
slgss=slgss+sp4;
slgsl=slgsl-sp4;
size=size+sp4;
puskt=false;
pusks=false;
i++;
}
}
if(clickedChartObject=="D1")
{
int x=0;
if(sp5>0)
while(x<sp5)
{
del.DeleteBuyStop(Magic2);
del.DeleteBuyLimit(Magic3);
x++;
}
else
{
del.DeleteBuyStop(Magic2);
del.DeleteBuyLimit(Magic3);
}
}
if(clickedChartObject=="D2")
{
int x=0;
if(sp5>0)
while(x<sp5)
{
del.DeleteSellStop(Magic2);
del.DeleteSellLimit(Magic3);
x++;
}
else
{
del.DeleteSellStop(Magic2);
del.DeleteSellLimit(Magic3);
}
}
if(clickedChartObject=="D3")
{
int x=0;
CloseAll();
}
ChartRedraw();// принудительно перерисуем все объекты на графике
}
}
void CloseAll(int ot=-1)
{
bool cl=1;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() /*&&
OrderMagicNumber()==magic*/)
{
if(OrderType()==0 && (ot==0 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,_Digits),50,White);
}
if(OrderType()==1 && (ot==1 || ot==-1))
{
RefreshRates();
cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,_Digits),50,White);
}
}
}
}
}
bool ButtonCreate2(const long chart_ID=0,
const string name="Button",
const int sub_window=0,
const long x=0,
const long y=0,
const int width=50,
const int height=18,
const string text="Button",
const string font="Arial",
const int font_size=10,//10
const color clr=clrBlack,
const color clrfon=clrLightGray,
const bool state=false)
{
if (ObjectFind(chart_ID,name)==-1)
{
ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0);
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER_LEFT_LOWER);
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,0);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,0);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,0);
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,1);
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,0);
ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
ObjectSetInteger(chart_ID,name,OBJPПоказано первые 50% кода (символов: 30316)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.