Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
SetGridOrders
//+------------------------------------------------------------------+
//| SetGridOrders.mq4 |
//| Pozitif |
//| mail: alex-w-@bk.ru |
//+------------------------------------------------------------------+
#property copyright "Pozitif"
#property link "mail: alex-w-@bk.ru"
#property show_inputs
//+------------------------------------------------------------------+
//| Ñêðèïò óñòàíàâëèâàåò ñåòêó îòëîæåííûõ îðäåðîâ, îò òîé öåíû íà |
//| êîòîðóþ áûë êèíóò ñêðèïò. |
//+------------------------------------------------------------------+
// ------------------ Âõîäíûå ïàðàìåòðû ñêðèïòà ---------------------+
extern double Price = 0; // Öåíà îòêðûòèÿ, èëè 0 - îðäåðà áóäóò óñòàíîâëåíû ïî òîé öåíå íà êîòîðóþ ïåðåòÿíóò ñêðèïò.
extern double Lot = 0.01; // Ðàçìåð ëîòà äëÿ îòëîæåííûõ îðäåðîâ.
extern int SetOrders = 3; // Êîëè÷åñòâî îðäåðîâ.
extern int Step = 10; // Ðàññòîÿíèå â ïóíêòàõ ìåæäó îðäåðàìè.
extern int StopLoss = 160;
extern bool GeneralStop = true; // Èñïîëüçîâàòü îäèí îáùèé ñòîï ëîññ âûñòàâëåííûé íà ïåðâîì îðäåðå, åñëè îòêëþ÷åíî òî äëÿ êàæäîãî îðäåðà áóäåò âûñòàâëåí ñâîé ñòîï íà óêàçàííîå ðàññòîÿíèå.
extern int TakeProfit = 160;
extern bool GeneralProfit = true; // Äëÿ êàæäîãî îðäåðà ñâîé òåéê ïðîôèò èëè îäèí îáùèé êîòîðûé áóäåò ðàâåí ïîñëåäíåìó âûñòàâëåííóìó îðäåðó.
extern bool UseSound = True; // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
extern int MagicNumber = 526;
//---------------------- Ãëîáàëüíûå ïåðåìåííûå ----------------------+
string NameFileSound = "news.wav"; // Íàèìåíîâàíèå çâóêîâîãî ôàéëà
int NumberOfTry = 3; // Êîëè÷åñòâî ïîïûòîê âûñòàâèòü îðäåð
//--------------------- Ïîäêëþ÷àåìûå áèáëèîòåêè ---------------------+
#include <stdlib.mqh> // Ñòàíäàðòíàÿ áèáëèîòåêà ÌÒ4
#include <WinUser32.mqh>
//+------------------------------------------------------------------+
//| ##############--- script start function ---#################### |
//+------------------------------------------------------------------+
int start()
{
//----------------- Variable Initialization -------------------------+
double pt, pr_ask, pr_bid, well_lots, open_lots, price_dp, order_sl, order_tp, price_extreme, open_pr;
int dg, min_sl, flags, answer, orders_type;
string symbl, str_box, title_box;
bool interrupt = true;
//----
symbl=Symbol();
dg=MarketInfo(symbl, MODE_DIGITS);
pt=MarketInfo(symbl, MODE_POINT);
pr_ask=NormalizeDouble(MarketInfo(symbl, MODE_ASK), dg);
pr_bid=NormalizeDouble(MarketInfo(symbl, MODE_BID), dg);
min_sl=MarketInfo(symbl,MODE_STOPLEVEL); // Ìèíèìàëüíî äîïóñòèìûé óðîâåíü ñòîï-ëîññà/òåéê-ïðîôèòà â ïóíêòàõ
well_lots=NormalizeDouble(AccountFreeMargin()/MarketInfo(Symbol(),MODE_MARGINREQUIRED), 2); // Äîñòóïíûå ëîòû, ïðîâåðÿåì õâàòèò ëè ñðåäñòâ äëÿ îòêðûòèÿ ïåðâîãî îðäåðà.
open_lots=NormalizeDouble(Lot, 2);
price_dp=NormalizeDouble(WindowPriceOnDropped(), dg);
if(Price != 0)price_dp = Price;
//========= Ïðîâåðÿåì áûë ëè ñêðèïò ïåðåòÿíóò íà ãðàôèê, èëè ïðîñòî çàïóùåí =========
if(price_dp == 0){
Alert("Ñêðèïò äîëæåí áûòü ïåðåíÿòóò íà ãðàôèê, íà òó öåíó îò êîòîðîé æåëàåòå óñòàíîâèòü îðäåðà !");
interrupt = false;
}
//=================== Ñïðàøèâàåì êàêîé òèï îðäåðîâ âûñòàâëÿòü =======================
if((interrupt == true)&&(pr_ask < price_dp)){
str_box = "Òèï îðäåðîâ. \n ÄÀ - BuyStop / ÍÅÒ - SellLimit / Îòìåíà - ïðåðâàòü âûïîëíåíèå";
title_box = "Âûáåðèòå òèï îðäåðà.";
flags = MB_YESNOCANCEL|MB_ICONEXCLAMATION;
answer = MessageBox(str_box, title_box, flags);
if(answer == IDCANCEL)interrupt = false;
else {
if(answer == IDYES)orders_type = OP_BUYSTOP;
if(answer == IDNO)orders_type = OP_SELLLIMIT;
}
}
if((interrupt == true)&&(pr_bid > price_dp)){
str_box = "Òèï îðäåðîâ. \n ÄÀ - SellStop / ÍÅÒ - BuyLimit / Îòìåíà - ïðåðâàòü âûïîëíåíèå";
title_box = "Âûáåðèòå òèï îðäåðà.";
flags = MB_YESNOCANCEL|MB_ICONEXCLAMATION;
answer = MessageBox(str_box, title_box, flags);
if(answer == IDCANCEL)interrupt = false;
else {
if(answer == IDYES)orders_type = OP_SELLSTOP;
if(answer == IDNO)orders_type = OP_BUYLIMIT;
}
}
//========= Ïðîâåðÿåì äîñòàòî÷íî ëè ñðåäñòâ äëÿ îòêðûòèÿ ïåðâîãî îðäåðà =============
if((open_lots > well_lots)&&(interrupt==true)){
str_box = "Âíèìàíèå ! âîçìîæíî áóäåò íåäîñòàòî÷íî ñðåäñòâ äëÿ îòêðûòèÿ ïåðâîãî îðäåðà. Âîçìîæíî äîñòóïíûé ëîò: "+well_lots+". "+"Ïðîäîëæèòü âûïîëíåíèå ?";
title_box = "Íåäîñòàòî÷íî ñðåäñòâ.";
flags = MB_YESNO|MB_ICONEXCLAMATION;
answer = MessageBox(str_box, title_box, flags);
if(answer == IDNO)interrupt = false;
}
//============================ Áëîê âûñòàâëåíèÿ îðäåðîâ =============================
if(interrupt){
if(orders_type ==OP_BUYSTOP){
if(GeneralStop){
if(price_dp - StopLoss*pt <= price_dp - min_sl*pt)order_sl = price_dp - StopLoss*pt;
else order_sl = price_dp - (StopLoss+min_sl)*pt;
}
if(GeneralProfit){
price_extreme = price_dp;
for(int b = 0; b <= SetOrders; b++)price_extreme += Step*pt;
if(price_extreme + TakeProfit*pt >= price_extreme + min_sl*pt)order_tp = price_extreme + TakeProfit*pt;
else order_tp = price_extreme + (TakeProfit+min_sl)*pt;
}
}
if(orders_type ==OP_SELLSTOP){
if(GeneralStop){
if(price_dp + StopLoss*pt >= price_dp + min_sl*pt)order_sl = price_dp + StopLoss*pt;
else order_sl = price_dp + (StopLoss+min_sl)*pt;
}
if(GeneralProfit){
price_extreme = price_dp;
for(int ss = 0; ss <= SetOrders; ss++)price_extreme -= Step*pt;
if(price_extreme - TakeProfit*pt <= price_extreme - min_sl*pt)order_tp = price_extreme - TakeProfit*pt;
else order_tp = price_extreme - (TakeProfit+min_sl)*pt;
}
}
if(orders_type ==OP_BUYLIMIT){
if(GeneralStop){
price_extreme = price_dp;
for(int i = 0; i <= SetOrders; i++)price_extreme -= Step*pt;
if(price_extreme - StopLoss*pt <= price_extreme - min_sl*pt)order_sl = price_extreme - StopLoss*pt;
else order_sl = price_extreme - (StopLoss+min_sl)*pt;
}
if(GeneralProfit){
if(price_dp + TakeProfit*pt >= price_dp + min_sl*pt)order_tp = price_dp + TakeProfit*pt;
else order_tp = price_dp + (TakeProfit+min_sl)*pt;
}
}
if(orders_type ==OP_SELLLIMIT){
if(GeneralStop){
price_extreme = price_dp;
for(int x = 0; x <= SetOrders; x++)price_extreme += Step*pt;
if(price_extreme + StopLoss*pt >= price_extreme + min_sl*pt)order_sl = price_extreme + StopLoss*pt;
else order_sl = price_extreme + (StopLoss+min_sl)*pt;
}
if(GeneralProfit){
if(price_dp - TakeProfit*pt <= price_dp - min_sl*pt)order_tp = price_dp - TakeProfit*pt;
else order_tp = price_dp - (TakeProfit+min_sl)*pt;
}
}
for(int cx = 0; cx <= SetOrders; cx++){
if(orders_type ==OP_BUYSTOP){
if(cx == 1){
open_pr = price_dp;
if(open_pr < pr_ask + min_sl*pt)open_pr = pr_ask + min_sl*pt;
}
else open_pr += Step*pt;
if(GeneralStop == false){
order_sl = open_pr - StopLoss*pt;
if(order_sl > open_pr - min_sl*pt)order_sl = open_pr - min_sl*pt;
}
if(GeneralProfit == false){
order_tp = open_pr + TakeProfit*pt;
if(order_tp < open_pr + min_sl*pt)open_pr = open_pr + min_sl*pt;
}
}
if(orders_type ==OP_SELLSTOP){
if(cx == 1){
open_pr = price_dp;
if(open_pr > pr_bid - min_sl*pt)open_pr = pr_bid - min_sl*pt;
}
else open_pr -= Step*pt;
if(GeneralStop == false){
order_sl = open_pr + StopLoss*pt;
if(order_sl < open_pr + min_sl*pt)order_sl = open_pr + min_sl*pt;
}
if(GeneralProfit == false){
order_tp = open_pr - TakeProfit*pt;
if(order_tp > open_pr - min_sl*pt)open_pr = open_pr - min_sl*pt;
}
}
if(orders_type ==OP_BUYLIMIT){
if(cx == 1){
open_pr = price_dp;
if(open_pr > pr_bid - min_sl*pt)open_pr = pr_bid - min_sl*pt;
}
else open_pr -= Step*pt;
if(GeneralStop == false){
order_sl = open_pr - StopLoss*pt;
if(order_sl > open_pr - min_sl*pt)order_sl = open_pr - min_sl*pt;
}
if(GeneralProfit == false){
order_tp = open_pr + TakeProfit*pt;
if(order_tp < open_pr + min_sl*pt)open_pr = open_pr + min_sl*pt;
}
}
if(orders_type ==OP_SELLLIMIT){
if(cx == 1){
open_pr = price_dp;
if(open_pr < pr_ask + min_sl*pt)open_pr = pr_ask + min_sl*pt;
}
else open_pr += Step*pt;
if(GeneralStop == false){
order_sl = open_pr + StopLoss*pt;
if(order_sl < open_pr + min_sl*pt)order_sl = open_pr + min_sl*pt;
}
if(GeneralProfit == false){
order_tp = open_pr - TakeProfit*pt;
if(order_tp > open_pr - min_sl*pt)open_pr = open_pr - min_sl*pt;
}
}
SetOrder("", orders_type, open_lots, open_pr, order_sl, order_tp, MagicNumber, 0);
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
void SetOrder(string sy, int op, double ll, double pp, double sl=0, double tp=0, int mn=0, datetime ex=0)
{
int err, dg, ticket=0;
//---------------
if (sy=="" || sy=="0") sy=Symbol();
for (int it=1; it<=NumberOfTry; it++) {
while (!IsTradeAllowed()) Sleep(5000);
dg=MarketInfo(sy, MODE_DIGITS);
pp=NormalizeDouble(pp, dg);
ticket=OrderSend(sy, op, ll, pp, 0, sl, tp, NULL, mn, 0, CLR_NONE);
if (ticket>0) {
if (UseSound) PlaySound(NameFileSound); break;
}
else {
err=GetLastError();
// Âûâîä ñîîáùåíèÿ îá îøèáêå
Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
if (err==4 || err==131 || err==132) Sleep(1000*300); break;
if (err==128 || err==142 || err==143) Sleep(1000*66.666);
if (err==140 || err==148 || err==4110 || err==4111) break;
if (err==141) Sleep(1000*100);
if (err==145) Sleep(1000*17);
if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
if (err!=135) Sleep(1000*7.7);
}
}
return(ticket);
}
//+----------------------------------------------------------------------------+
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---