Kod: Zaznacz cały
//+----------------------------------------------- -------------------+
/ / | Visual_Handle_Tranning.mq4 |
//+----------------------------------------------- -------------------+
/ / | B - czynne stanowiska zł; |
/ / | S - otwartych pozycji Sprzedają; |
/ / | "Strzałka w górę" - zamknij wszystkie KUP; |
/ / | "Down" - zamknij wszystkie SPRZEDAC; |
/ / | T - zawiera na końcu zatrzymać ogólnych; |
/ / | R - wyłącza trailing stop; |
/ / | D - usunięcie wszystkich oczekujących zamówień. |
/ / | Aby być wprowadzane do czasu kolejności myszy wybrać menu |
/ / | Ikony "strzałka w górę" do Kup-ów i kliknij w miejscu, |
/ / | Plan gdzie miejsce zamówienia. Jeśli klikniesz przycisk powyżej ceny, a następnie |
/ / | Czy BuyStop, jeżeli jest ona niższa - będzie BuyLimit. |
/ / | Aby Sprzedają-y, odpowiednio, ikona "strzałkę w dół". |
/ / | Modyfikacja niektórych warrantów: |
/ / | Kliknij dwukrotnie ikonę Wyróżniamy żądanej kolejności |
/ / | Więcej, kliknij prawym przyciskiem myszy |
/ / | Arrow i wybierz polecenie Właściwości. |
/ / | Następnie zmienić pola "Opis" należy odrębne opcji |
/ / | Aresztowania. |
/ / | Możesz zmienić SL, TP i zamknij rynku zamówień |
/ / | Lub usunąć czasu zamiast pisać puste lub zamyka del |
/ / | Ważną kwestią jest utrzymanie luk - ten rozdział! |
/ / | Format pola "Opis" Separator "SPACJA !!!": |
/ / | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
/ / | Cena = 1,2565 SL TP = 1,2765 = 1,2265 = polecenie zamknij |
/ / | | | | | | | | | | |
/ / | Zespół zamknięciu rynku porządku - zamknij |
/ / | Usuwanie odroczony - del |
//+----------------------------------------------- -------------------+
# Własności praw autorskich Copyright Š 2005, klot "
# Własności link "klot@mail.ru"
# Define MAGICEXP 00000001
//----
# Include <stdlib.mqh>
# Include <WinUser32.mqh>
//----
# Import "IdleLib.dll"
GetLastKeyWP int ();
GetLastMouseWP int ();
IdleLibInit int ();
IdleLibUnInit int ();
string GetActiveWndName ();
# Import
//----
extern double Lots = 0.1;
extern double TrailingStop = 15,0;
//----
statycznych datetime lastsd;
statycznych Systemie int = 0;
/ / Color = clModifyBuy Aqua;
/ / Color = Magenta clModifySell;
//+----------------------------------------------- -------------------+
/ / | Ekspert Inicjalizacja funkcji |
//+----------------------------------------------- -------------------+
int init ()
(
/ / Zainicjowanie dll do przechwytywania zdarzeń
IdleLibInit ();
//----
return (0);
)
//+----------------------------------------------- -------------------+
/ / | Ekspert deinitialization funkcji |
//+----------------------------------------------- -------------------+
int deinit ()
(
/ / Dll deinitsializiruem do przechwytywania zdarzeń
IdleLibUnInit ();
//----
return (0);
)
//+----------------------------------------------- -------------------+
/ / | Ekspert zacząć funkcjonować |
//+----------------------------------------------- -------------------+
int start ()
(
if (IsDllsAllowed () == false)
(
Print ( "Wywołanie funkcji z biblioteki DLL bibliotek nie jest możliwe. Biegły nie może być wprowadzone w życie.");
return (0);
)
if (IsLibrariesAllowed () == false)
(
Print ( "Biblioteka połączenia są zabronione. Biegły nie może być wprowadzone w życie.");
return (0);
)
if (! IsTesting ())
(
Print ( "Biegły nie jest uruchomiony w trybie testowym");
return (0);
)
if (IsOptimization ())
(
Print ( "Expert uruchomiony w trybie optymalizacji");
return (0);
)
/ / Usuwanie drebezga klucze
spustowymi statycznych int = 0;
/ / Kod zapytania ostatniej sekwencji klawiszy
int lastkey = GetLastKeyWP ();
/ / Nazwa Metatrader okno, w którym zdarzenie miało miejsce
lastwnd string = GetActiveWndName ();
//----
if ((lastkey! = 0) & & (lastwnd! = ""))
(
/ / Usunięcie drebezga klucze
if (spustowymi! = lastkey)
progowa = lastkey;
w przeciwnym razie
(
lastkey = 0;
progowa = 0;
)
//---
switch (lastkey)
(
przypadku 66: buy_open (0, 0);
break;
przypadku 83: sell_open (0, 0);
break;
przypadku 38: close_order (1);
break;
przypadku 40: close_order (-1);
break;
przypadku 84: if (Systemie == 0)
Systemie = 1;
Komentarz ( "Tralling aktywny =" TrailingStop);
break;
przypadku 82: if (Systemie == 1)
Systemie = 0;
Komentarz ( "Tralling off");
break;
przypadku 68: delete_pending_all ();
break;
/ / Case ..: Możesz myśleć o wszelkich własności funkcji
default: break;
)
)
send_pending ();
managers_market_orders ();
//----
if (lastkey! = 0)
Print ( "" + lastkey);
//----
return (0);
)
//+----------------------------------------------- -------------------+
/ / | Biuro rynku zamówień (zmiana SL, TP, cena) |
/ / | Wszystkie pisać Właściwości Strzałka w "Opis" |
/ / | Format pola "Opis" Separator "SPACJA !!!": |
/ / | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
/ / | Cena = 1,2565 SL TP = 1,2765 = 1,2265 = polecenie zamknij |
/ / | | | | | | | | | | |
/ / | Zespół zamknięciu rynku porządku - zamknij |
/ / | Usuwanie odroczony - del |
/ / |
//+----------------------------------------------- -------------------+
void managers_market_orders ()
(
string opis, nazwisko, exec, _EMPTY = "empty";
array_param string [];
int count, arrow_code, bilet, poz, nGetLastError;
podwójne ceny, sl, tp;
int TrailingStep = 5;
int obj_total = ObjectsTotal ();
//----
if (obj_total == 0)
powrotu;
//----
for (int i = obj_total - 1; i> = 0; i -)
(
name = ObjectName (i);
//----
if (ObjectType (nazwa)! = OBJ_ARROW)
nadal;
arrow_code = ObjectGet (imię i nazwisko, OBJPROP_ARROWCODE);
if (arrow_code! = 1 & & arrow_code! = 2)
nadal;
w przeciwnym razie
(
/ / Oblicza symbolem dla aresztowania Arrow
pos = StringFind (nazwa, "", 0);
bilet = StrToInteger (StringSubstr (nazwisko, 1, pos));
/ / Print ( "bilet =" bilet);
//---
if (OrderSelect (bilet, SELECT_BY_TICKET) == true)
(
if (OrderCloseTime (!) = 0)
nadal;
/ / Przeczytaj opis we właściwościach Arrow
desc = ObjectDescription (nazwa);
/ / Jeśli wiersz jest pusty wypełnić początkowej wartości
if (StringLen (opis) == 0)
(
desc = StringConcatenate ( "Cena =" OrderOpenPrice (), "SL ="
OrderStopLoss (), "TP =" OrderTakeProfit (),
"Team =" _EMPTY);
ObjectSetText (nazwa, opis);
)
/ / Wypełnij tablicę parametrów zlecenia
count = StrSplit (opis, array_param, "");
if (count! = Cool
(
desc = StringConcatenate ( "Cena =" OrderOpenPrice (), "SL ="
OrderStopLoss (), "TP =" OrderTakeProfit (),
"Team =" _EMPTY);
ObjectSetText (nazwa, opis);
Print ( "Błąd w dziedzinie Oisanie. Polje vostanovleno !!!");
)
w przeciwnym razie
(
cena = StrToDouble (array_param [1]);
sl = StrToDouble (array_param [3]);
tp = StrToDouble (array_param [5]);
exec = array_param [7];
)
//---
if (OrderType () == OP_BUY)
(
if (TrailingStop> MarketInfo (Symbol (), MODE_STOPLEVEL) & & Systemie == 1)
(
if (Bid - OrderOpenPrice ()> TrailingStop * Point)
(
if (OrderStopLoss () <ofert - (TrailingStop + TrailingStep - 1) * Point)
(
sl = cena ofertowa - TrailingStop * Point;
desc = StringConcatenate ( "Cena =" OrderOpenPrice (), "SL ="
sl, "TP =" OrderTakeProfit (),
"Team =" _EMPTY);
ObjectSetText (nazwa, opis);
)
)
)
//---
if (sl! = 0 & & sl! = OrderStopLoss ())
ModifyStopLoss (SL);
if (tp! = 0 & & tp! = OrderTakeProfit ())
ModifyTakeProfit (tp);
//---
if (exec == "Zamknij")
(
RefreshRates ();
OrderClose (OrderTicket (), OrderLots (), ofert, 3, Aqua);
nGetLastError = GetLastError ();
if (nGetLastError! = 0)
Print ( "Błąd zamknięcia KUP kolejności:" ErrorDescription (nGetLastError));
)
)
if (OrderType () == OP_SELL)
(
if (TrailingStop> MarketInfo (Symbol (), MODE_STOPLEVEL) & & Systemie == 1)
(
if (OrderOpenPrice () - Zapytaj> TrailingStop * Point)
(
if (OrderStopLoss ()> Zapytaj + (TrailingStop + TrailingStep --
1) * Point | | OrderStopLoss () == 0)
(
sl = Zapytaj + TrailingStop * Point;
desc = StringConcatenate ( "Cena =" OrderOpenPrice (),
"SL =" pl ", TP =" OrderTakeProfit (),
"Team =" _EMPTY);
ObjectSetText (nazwa, opis);
)
)
)
//---
if (sl! = 0 & & sl! = OrderStopLoss ())
ModifyStopLoss (SL);
if (tp! = 0 & & tp! = OrderTakeProfit ())
ModifyTakeProfit (tp);
//---
if (exec == "Zamknij")
(
RefreshRates ();
OrderClose (OrderTicket (), OrderLots (), Zapytaj, 3, Yellow);
nGetLastError = GetLastError ();
if (nGetLastError! = 0)
Print ( "Błąd zamknięcia SPRZEDAC celu:"
ErrorDescription (nGetLastError));
)
)
if (OrderType () == OP_SELLLIMIT | | OrderType () == OP_BUYLIMIT | |
OrderType () == OP_BUYSTOP | | OrderType () == OP_SELLSTOP)
(
/ / Jeśli mysz przeniósł nakazu
if (NormalizeDouble (ObjectGet (imię i nazwisko, OBJPROP_PRICE1), cyfr)! = cena)
(
cena = NormalizeDouble (ObjectGet (imię i nazwisko, OBJPROP_PRICE1), cyfry);
desc = StringConcatenate ( "Cena =" cena ", SL =" OrderStopLoss (),
"TP =" OrderTakeProfit (), "Team ="
_EMPTY);
ObjectSetText (nazwa, opis);
)
//---
if (cena! = OrderOpenPrice () & & MathAbs (cena - Zapytaj)>
(MarketInfo (Symbol (), MODE_STOPLEVEL) * Point))
(
OrderModify (OrderTicket (), cena, OrderStopLoss (), OrderTakeProfit (),
OrderExpiration (), CLR_NONE);
nGetLastError = GetLastError ();
if (nGetLastError! = 0)
Print ( "Błąd zamknięcia SPRZEDAC celu:"
ErrorDescription (nGetLastError));
w przeciwnym razie
ObjectDelete (nazwa);
)
//----
if (sl! = 0 & & sl! = OrderStopLoss ())
ModifyStopLoss (SL);
if (tp! = 0 & & tp! = OrderTakeProfit ())
ModifyTakeProfit (tp);
//----
if (exec == "del")
(
OrderDelete (OrderTicket ());
nGetLastError = GetLastError ();
if (nGetLastError! = 0)
Print ( "Błąd zamknięcia SPRZEDAC celu:"
ErrorDescription (nGetLastError));
)
)
)
w przeciwnym razie
Print ( "OrderSelect () zwróciła błąd -" GetLastError ());
)
)
)
//+----------------------------------------------- -------------------+
/ / | Ustaw oczekiwaniu zamówienia |
/ / | Wystarczy przeciągnąć ikonę "arrow-up" do miejsca, gdzie |
/ / | Chcesz umieścić w oczekiwaniu na zamówienie. Jeśli ceny będą wyższe ByuStop |
/ / | Jeśli niższe ceny - będzie BuyLimit. Dla Sel-y - odpowiednio |
/ / | Ikona "strzałkę w dół |
//+----------------------------------------------- -------------------+
void send_pending ()
(
int arrow_code;
string name;
double cena;
int obj_total = ObjectsTotal ();
//----
for (int i = 0; i <obj_total; i + +)
(
name = ObjectName (i);
if (ObjectType (nazwa)! = OBJ_ARROW)
nadal;
arrow_code = ObjectGet (imię i nazwisko, OBJPROP_ARROWCODE);
if (arrow_code! = 242 & & arrow_code! = 241)
nadal;
//---
if (arrow_code == 242)
(
cena = NormalizeDouble (ObjectGet (imię i nazwisko, OBJPROP_PRICE1), cyfry);
if (cena <ofert - (MarketInfo (Symbol (), MODE_STOPLEVEL) * Point))
(
sellstop_open (cena, 0, 0);
ObjectDelete (nazwa);
)
if (cena> Zapytaj + (MarketInfo (Symbol (), MODE_STOPLEVEL) * Point))
(
selllimit_open (cena, 0, 0);
ObjectDelete (nazwa);
)
)
//---
if (arrow_code == 241)
(
cena = NormalizeDouble (ObjectGet (imię i nazwisko, OBJPROP_PRICE1), cyfry);
//----
if (cena> Zapytaj + (MarketInfo (Symbol (), MODE_STOPLEVEL) * Point))
(
buystop_open (cena, 0, 0);
ObjectDelete (nazwa);
)
if (cena <ofert - (MarketInfo (Symbol (), MODE_STOPLEVEL) * Point))
(
buylimit_open (cena, 0, 0);
ObjectDelete (nazwa);
)
)
)
//----
powrotu;
)
//+----------------------------------------------- -------------------+
/ / | |
//+----------------------------------------------- -------------------+
void delete_pending_all ()
(
bool wynik;
int cmd, łącznie;
total = OrdersTotal ();
//----
if (oddanych == 0)
powrotu;
//----
for (int i = całkowita - 1; i> = 0; i -)
(
if (OrderSelect (i, SELECT_BY_POS, MODE_TRADES))
(
cmd = OrderType ();
//---- Czasu zamówienia tylko są uważane
if (cmd! OP_BUY = & & cmd! = OP_SELL)
(
Drukuj wybrany //---- celu
OrderPrint ();
Usuń //---- czasu pierwszej kolejności
wynik = OrderDelete (OrderTicket ());
//----
if (wynik! = TRUE)
(
Print ( "LastError =" GetLastError ());
break;
)
)
)
w przeciwnym razie
(
Print ( "Błąd podczas celu wybierz" GetLastError ());
break;
)
)
//----
powrotu;
)
//+----------------------------------------------- -------------------+
/ / | |
//+----------------------------------------------- -------------------+
void selllimit_open (podwójne ceny, podwójne SL = 0, double TP = 0)
(
int biletu ważności;
//----
Wygaśnięcie CurTime = () + PERIOD_D1 * 60;
//----
bilet = OrderSend (Symbol (), OP_SELLLIMIT, parcele, cena 0, SL, TP "," MAGICEXP,
Wygaśnięcie, zielony);
if (bilet <= 0)
Print ( "Błąd =" GetLastError ());
w przeciwnym razie
(
Print ( "bilet =" bilet);
lastsd = CurTime ();
)
//----
return (0);
)
//+----------------------------------------------- -------------------+
/ / | |
//+----------------------------------------------- -------------------+
void sellstop_open (podwójne ceny, podwójne SL = 0, double TP = 0)
(
int biletu ważności;
//----
Wygaśnięcie CurTime = () + PERIOD_D1 * 60;
//----
bilet = OrderSend (Symbol (), OP_SELLSTOP, parcele, cena 0, SL, TP "," MAGICEXP,
Wygaśnięcie, zielony);
if (bilet <= 0)
Print ( "Błąd =" GetLastError ());
w przeciwnym razie
(
Print ( "bilet =" bilet);
lastsd = CurTime ();
)
//----
return (0);
)
//+----------------------------------------------- -------------------+
/ / | |
//+----------------------------------------------- -------------------+
void buylimit_open (podwójne ceny, podwójne SL = 0, double TP = 0)
(
int biletu ważności;
//----
Wygaśnięcie CurTime = () + PERIOD_D1 * 60;
//----
bilet = OrderSend (Symbol (), OP_BUYLIMIT, parcele, cena 0, SL, TP "," MAGICEXP,
Wygaśnięcie, zielony);
if (bilet <= 0)
Print ( "Błąd =" GetLastError ());
w przeciwnym razie
(
Print ( "bilet =" bilet);
lastsd = CurTime ();
)
//----
return (0);
)
//+----------------------------------------------- -------------------+
/ / | |
//+----------------------------------------------- -------------------+
void buystop_open (podwójne ceny, podwójne SL = 0, double TP = 0)
(
int biletu ważności;
//----
Wygaśnięcie CurTime = () + PERIOD_D1 * 60;
//----
RefreshRates ();
bilet = OrderSend (Symbol (), OP_BUYSTOP, parcele, cena 0, SL, TP "," MAGICEXP,
Wygaśnięcie, zielony);
if (bilet <= 0)
Print ( "Błąd =" GetLastError ());
w przeciwnym razie
(
Print ( "bilet =" bilet);
lastsd = CurTime ();
)
//----
return (0);
)
//+----------------------------------------------- -------------------+
/ / | |
//+----------------------------------------------- -------------------+
void buy_open (SL podwójne, podwójne TP)
(
int biletu lasterror;
RefreshRates ();
bilet = OrderSend (Symbol (), OP_BUY, parcele, Zapytaj, 5, SL, TP, 0, MAGICEXP, 0, Aqua);
if (bilet> 0)
(
if (OrderSelect (bilet, SELECT_BY_TICKET, MODE_TRADES))
Print ( "KUP celu otwarcia:" OrderOpenPrice ());
lastsd = CurTime ();
)
w przeciwnym razie
Print ( "Błąd podczas otwierania KUP kolejności:" ErrorDescription (GetLastError ()));
powrotu;
)
//+----------------------------------------------- -------------------+
/ / | |
//+----------------------------------------------- -------------------+
void sell_open (SL podwójne, podwójne TP)
(
int biletu lasterror;
RefreshRates ();
bilet = OrderSend (Symbol (), OP_SELL, parcele, ofert, 5, SL, TP, 0, MAGICEXP, 0, Red);
if (bilet> 0)
(
if (OrderSelect (bilet, SELECT_BY_TICKET, MODE_TRADES))
Print ( "Sprzedaj celu otwarcia:" OrderOpenPrice ());
lastsd = CurTime ();
)
w przeciwnym razie
Print ( "Błąd podczas otwierania Sprzedają kolejności:" ErrorDescription (GetLastError ()));
powrotu;
)
//+----------------------------------------------- -------------------+
/ / | Zamknięcie zamówienia n = 1 - Zamknij Kup n =- 1 - zamknięte Sprzedaż |
//+----------------------------------------------- -------------------+
void close_order (int n = 0)
(
int nGetLastError;
int nOrdersTotal = OrdersTotal ();
//----
for (int i = nOrdersTotal - 1; i> = 0; i -)
(
OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
nGetLastError = GetLastError ();
//----
if (nGetLastError! = 0)
(
Print ( "Błąd wyboru kolejności:" ErrorDescription (nGetLastError));
nadal;
)
//----
if (OrderMagicNumber ()! = MAGICEXP | | OrderSymbol ()! = Symbol ())
nadal;
Sprawdź //---- celu wpisz
if (OrderType () == OP_BUY & & n == 1)
(
RefreshRates ();
OrderClose (OrderTicket (), OrderLots (), ofert, 3, Aqua);
nGetLastError = GetLastError ();
if (nGetLastError! = 0)
Print ( "Błąd zamknięcia KUP kolejności:" ErrorDescription (nGetLastError));
)
//----
if (OrderType () == OP_SELL & & n ==- 1)
(
RefreshRates ();
OrderClose (OrderTicket (), OrderLots (), Zapytaj, 3, Yellow);
nGetLastError = GetLastError ();
if (nGetLastError! = 0)
Print ( "Błąd zamknięcia SPRZEDAC kolejności:" ErrorDescription (nGetLastError));
)
)
)
//+----------------------------------------------- -------------------+
/ / | Poziom StopLoss "Copyright" Š KimIV |
/ / | Parametry |
/ / | LdStopLoss - poziom StopLoss |
/ / | ClModify - kolor aktualizacji |
//+----------------------------------------------- -------------------+
void ModifyStopLoss (double ldStop, kolor clModify = Magenta)
(
bool fm;
podwójne ldOpen = OrderOpenPrice ();
podwójne ldTake = OrderTakeProfit ();
int err;
//----
if (IsTradeAllowed ())
(
fm = OrderModify (OrderTicket (), ldOpen, ldStop, ldTake, 0, clModify);
if (! fm)
(
err = GetLastError ();
Print ( "Błąd (" err ") modyfikowania SL:" ErrorDescription (err));
)
)
)
//+----------------------------------------------- -------------------+
/ / | Poziom TakeProfit |
/ / | Parametry |
/ / | LdTake - poziom TakeProfit |
/ / | ClModify - kolor aktualizacji |
//+----------------------------------------------- -------------------+
void ModifyTakeProfit (double ldTake, kolor clModify = Magenta)
(
bool fm;
podwójne ldOpen = OrderOpenPrice ();
podwójne ldStop = OrderStopLoss ();
int err;
//----
if (IsTradeAllowed ())
(
fm = OrderModify (OrderTicket (), ldOpen, ldStop, ldTake, 0, clModify);
if (! fm)
(
err = GetLastError ();
Print ( "Błąd (" err ") modyfikowania SL:" ErrorDescription (err));
)
)
)
//+----------------------------------------------- -------------------+
/ / | Podział ciągu znaków na tablicę elementów |
/ / | Powrót |
/ / | Liczba elementów w tablicy |
/ / | Parametry |
/ / | Źródło - tekst |
/ / | Dest - wyjście tablicy |
/ / | Delimeter - separator |
//+----------------------------------------------- -------------------+
int StrSplit (string źródło, string & dest [], string delimeter = "";)
(
int cnt = 0;
int last_pos = 0;
int pos = StringFind (źródło, delimeter, last_pos);
//----
while (pos! = -1)
(
ArrayResize (dest, cnt + 1);
dest [cnt] = StringSubstr (źródło, last_pos, poz - last_pos);
cnt + +;
last_pos = pos + 1;
pos = StringFind (źródło, delimeter, last_pos);
)
if (last_pos! = 0 & & last_pos <StringLen (źródło))
(
ArrayResize (dest, cnt + 1);
dest [cnt] = StringSubstr (źródło, last_pos, StringLen (źródło) - last_pos);
cnt + +;
)
return (cnt);
)
//+----------------------------------------------- -------------------+