Akcja z klawisza

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
borysewicz
Stały bywalec
Stały bywalec
Posty: 75
Rejestracja: 01 gru 2008, 21:17

Nieprzeczytany post autor: borysewicz »

a dlaczego chcesz to zrobic w ea ?? nie lepiej zrobic ci skrypt i uruchamiac go skrutem klawiszowym ??
Nie wiem czy warto bo nie wiem na czym polega taki kreypt :o

Dodano po 28 minutach:
luktom pisze:Robisz w EA warunek na podstawie zmiennej globalnej, natomiast skryptem przypisanym do klawisza zmieniasz wartość tej zmiennej globalnej.

Czyli np:
1. Zmienna globalna goLong=0
2. EA monitoruje tą zmienną
3. Naciskasz klawisz, odpala się skrypt
4. Skrypt ustawia zmienną goLong=1
5. EA monitoruje zmienną i stwierdza, że zaszedł warunek goLong==1
6. EA wchodzi w pozycję
7. EA przywraca zmienną do domyślnej wartości 0
wszystko ładnie opisałeś tylko własnie moim problememt jest że włąsnie nie potrafie napisać w EA odpalania z klawisza. Prosził bym na podstawie zamieszczonego skryptu na pierwszej stronie dopisania potrzebnych funkcji.

Z góry dziekuje :)

Awatar użytkownika
reptile
Maniak
Maniak
Posty: 2799
Rejestracja: 13 gru 2008, 13:48

Nieprzeczytany post autor: reptile »

jak znajde to podrzuce skrypt ktory mial w sobie takie akcje w indyku ( na FF było w np. w skrypcie do tworzenia spirali
* tag chyba "spiral"

edytowałem : dodałęm skrypt > klawisze 1, 2 escape

- to jest file.ex4 (trzeba chyba dekompilować) nie ma w opisie mql opisu jak stosować akcje dla klawiszy?

ale chyba można zrobić wiec w MT4 : klawisz S - sell, B - buy bez skrutów
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Awatar użytkownika
borysewicz
Stały bywalec
Stały bywalec
Posty: 75
Rejestracja: 01 gru 2008, 21:17

Nieprzeczytany post autor: borysewicz »

reptile pisze:jak znajde to podrzuce skrypt ktory mial w sobie takie akcje w indyku ( na FF było w np. w skrypcie do tworzenia spirali
* tag chyba "spiral"

edytowałem : dodałęm skrypt > klawisze 1, 2 escape

- to jest file.ex4 (trzeba chyba dekompilować) nie ma w opisie mql opisu jak stosować akcje dla klawiszy?

ale chyba można zrobić wiec w MT4 : klawisz S - sell, B - buy bez skrutów
to zupełnie nie to :roll:

Awatar użytkownika
reptile
Maniak
Maniak
Posty: 2799
Rejestracja: 13 gru 2008, 13:48

Nieprzeczytany post autor: reptile »

Pytanie:

Czy da się zrobić by wciskając klawisz "k" z klawiatury pokazywać i ukrywać np. horyzontalną linię na cenie 1.2525 ?

Pierz Andrzej
a dlaczego chcesz to zrobic w ea ?? nie lepiej zrobic ci skrypt i uruchamiac go skrutem klawiszowym ??
- klawisz "q" = sell 0,01 lota
- klawisz "w" = sell 0,1 lota
- klawisz "e" = sell 1 lota
to zupełnie nie to
borysewicz

* wydaje mi się, że chcesz własnie taką funkcję jaką posiada powyższy indykator :) tylko nikt nie wie jak to zrobić, dzieki temu powstałby MT4-ninja EA .
* a ty w swoim EA mógłbyś definiować różne akcje dla klawiszy, np
"S" strat EA
"p" pauza EA
i taki kod trzeba by wcisnąć do twojego EA bo uruchamianie skryptami jest bez sensu EA nie jest wtedy automatyczne. Równie dobrze EA możesz wyłączyć tym przyciskiem.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Awatar użytkownika
borysewicz
Stały bywalec
Stały bywalec
Posty: 75
Rejestracja: 01 gru 2008, 21:17

Nieprzeczytany post autor: borysewicz »

reptile pisze:Równie dobrze EA możesz wyłączyć tym przyciskiem
Jak ten przycisk będzie wyłączony to przestana działać również inne strategie a to odpada.



nie poraz pierwszy odpowiedzią było zrobienie w EA kodu który otwiera wydarzenie po przez nacisniecie jakiegoś klawisza z klawiatóry. Tylko nie wiem dlaczeo jeszcze nikt nie podał jak ma wygładć taki kod? Bo całą tą dyskucję wywołałem włanie po to by się dowiedzieć jak taki kod wygląda :|

Awatar użytkownika
reptile
Maniak
Maniak
Posty: 2799
Rejestracja: 13 gru 2008, 13:48

Nieprzeczytany post autor: reptile »

Temat jest o akcji klawisza więc dodam co znalazłem

http://www.forex-tsd.com/general-discus ... lease.html

Kod: Zaznacz cały

#import "IdleLib.dll"
int GetLastKeyWP();
int GetLastMouseWP();
int IdleLibInit();
int IdleLibUnInit();
string GetActiveWndName();

Kod: Zaznacz cały

int start()
  {
   if(IsDllsAllowed() == false)
     {
       Print("Âűçîâ DLL-ôóíęöčé čç áčáëčîňĺę íĺâîçěîćĺí. Ýęńďĺđň íĺ ěîćĺň âűďîëí˙ňüń˙.");
       return(0);
     }
   if(IsLibrariesAllowed() == false)
     {
       Print("Áčáëčîňĺ÷íűĺ âűçîâű çŕďđĺůĺíű. Ýęńďĺđň íĺ ěîćĺň âűďîëí˙ňüń˙.");
       return(0);
     }
   if(!IsTesting()) 
     { 
       Print("Ýęńďĺđň çŕďóůĺí íĺ â đĺćčěĺ ňĺńňčđîâŕíč˙"); 
       return(0);
     }
   if(IsOptimization())
     { 
       Print("Ýęńďĺđň çŕďóůĺí â đĺćčěĺ îďňčěčçŕöčč"); 
       return(0);
     } 
// óńňđŕíĺíčĺ äđĺáĺçăŕ ęëŕâčř
   static int trigger = 0; 
// Îďđŕřčâŕĺě ęîä ďîńëĺäíĺé íŕćŕňîé ęëŕâčřč
   int lastkey = GetLastKeyWP(); 
// Čě˙ îęíŕ Metatrader, ăäĺ ďđîčçîřëî ńîáűňčĺ
   string lastwnd = GetActiveWndName();
//----
   if((lastkey != 0) && (lastwnd != ""))
     {
       //óńňđŕíĺíčĺ äđĺáĺçăŕ ęëŕâčř
       if(trigger != lastkey) 
           trigger = lastkey; 
       else 
         { 
           lastkey = 0; 
           trigger = 0; 
         }
       //---
       switch(lastkey)
         {
           case 66: buy_open(0, 0); 
                    break;
           case 83: sell_open(0, 0); 
                    break;
           case 38: close_order(1); 
                    break;
           case 40: close_order(-1); 
                    break;
           case 84: if(tral == 0) 
                        tral = 1; 
                    Comment("Tralling âęëţ÷ĺí = ", TrailingStop); 
                    break;
           case 82: if(tral == 1 ) 
                        tral = 0; 
                    Comment("Tralling âűęëţ÷ĺí"); 
                    break;
           case 68: delete_pending_all(); 
                    break;
           //case ..: ěîćíî ďđčäóěŕňü ëţáóţ ńîáńňâĺííţ ôč÷ó
           default : break;
         }
     }
   send_pending();
   managers_market_orders();
//----
   if(lastkey != 0)
       Print(" "+lastkey);
//----
   return(0);
  }


Dodano po 2 minutach:
borysewicz pisze:
reptile pisze:Równie dobrze EA możesz wyłączyć tym przyciskiem
Jak ten przycisk będzie wyłączony to przestana działać również inne strategie a to odpada.
* mam taki sam problem :wink:
borysewicz pisze: nie poraz pierwszy odpowiedzią było zrobienie w EA kodu który otwiera wydarzenie po przez nacisniecie jakiegoś klawisza z klawiatóry. Tylko nie wiem dlaczeo jeszcze nikt nie podał jak ma wygładć taki kod? Bo całą tą dyskucję wywołałem włanie po to by się dowiedzieć jak taki kod wygląda :|

Więc spróujmy rozwiązać problem :roll:

Dodano po 10 minutach:

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);
)
//+----------------------------------------------- -------------------+
przełożyłęm tą cyrlice na polski wg google :lol: a w załączniku cyrlica.txt
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Awatar użytkownika
borysewicz
Stały bywalec
Stały bywalec
Posty: 75
Rejestracja: 01 gru 2008, 21:17

Nieprzeczytany post autor: borysewicz »

Kto mi pomoże napisać to w jezyku mql 4

if (naciśniety klawisz S)

if (przytrzymany klawisz Ctrl && wciśniety klawisz S)

Awatar użytkownika
reptile
Maniak
Maniak
Posty: 2799
Rejestracja: 13 gru 2008, 13:48

Get keyboard keys to MetaTrader!

Nieprzeczytany post autor: reptile »

http://forum.mql4.com/4024

Kod: Zaznacz cały

if (Holiday) SendKey(Ctrl+E);
to alternatywne rozwiązanie wg. myśli lutkom

Dodano po 8 minutach:

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                                     Keyboard.mq4 |
//|                                                       Codersguru |
//|                                        http://www.meatrader.info |
//+------------------------------------------------------------------+
#property copyright "Codersguru"
#property link      "http://www.meatrader.info"

#property indicator_chart_window

#import "user32.dll"
   bool      GetAsyncKeyState(int nVirtKey);
#import

#define KEYEVENTF_EXTENDEDKEY          0x0001
#define KEYEVENTF_KEYUP                0x0002

#define VK_0   48
#define VK_1   49
#define VK_2   50
#define VK_3   51
#define VK_4   52
#define VK_5   53
#define VK_6   54
#define VK_7   55
#define VK_8   56
#define VK_9   57
#define VK_A   65
#define VK_B   66
#define VK_C   67
#define VK_D   68
#define VK_E   69
#define VK_F   70
#define VK_G   71
#define VK_H   72
#define VK_I   73
#define VK_J   74
#define VK_K   75
#define VK_L   76
#define VK_M   77
#define VK_N   78
#define VK_O   79
#define VK_P   80
#define VK_Q   81
#define VK_R   82
#define VK_S   83
#define VK_T   84
#define VK_U   85
#define VK_V   86
#define VK_W   87
#define VK_X   88
#define VK_Y   89
#define VK_Z   90

#define VK_LBUTTON         1     //Left mouse button
#define VK_RBUTTON         2     //Right mouse button
#define VK_CANCEL          3     //Control-break processing
#define VK_MBUTTON         4     //Middle mouse button (three-button mouse)
#define VK_BACK            8     //BACKSPACE key
#define VK_TAB             9     //TAB key
#define VK_CLEAR           12    //CLEAR key
#define VK_RETURN          13    //ENTER key
#define VK_SHIFT           16    //SHIFT key
#define VK_CONTROL         17    //CTRL key
#define VK_MENU            18    //ALT key
#define VK_PAUSE           19    //PAUSE key
#define VK_CAPITAL         20    //CAPS LOCK key
#define VK_ESCAPE          27    //ESC key
#define VK_SPACE           32    //SPACEBAR
#define VK_PRIOR           33    //PAGE UP key
#define VK_NEXT            34    //PAGE DOWN key
#define VK_END             35    //END key
#define VK_HOME            36    //HOME key
#define VK_LEFT            37    //LEFT ARROW key
#define VK_UP              38    //UP ARROW key
#define VK_RIGHT           39    //RIGHT ARROW key
#define VK_DOWN            40    //DOWN ARROW key
#define VK_PRINT           42    //PRINT key
#define VK_SNAPSHOT        44    //PRINT SCREEN key
#define VK_INSERT          45    //INS key
#define VK_DELETE          46    //DEL key
#define VK_HELP            47    //HELP key
#define VK_LWIN            91    //Left Windows key (Microsoft® Natural® keyboard)
#define VK_RWIN            92    //Right Windows key (Natural keyboard)
#define VK_APPS            93    //Applications key (Natural keyboard)
#define VK_SLEEP           95    //Computer Sleep key
#define VK_NUMPAD0         96    //Numeric keypad 0 key
#define VK_NUMPAD1         97    //Numeric keypad 1 key
#define VK_NUMPAD2         98    //Numeric keypad 2 key
#define VK_NUMPAD3         99    //Numeric keypad 3 key
#define VK_NUMPAD4         100   //Numeric keypad 4 key
#define VK_NUMPAD5         101   //Numeric keypad 5 key
#define VK_NUMPAD6         102   //Numeric keypad 6 key
#define VK_NUMPAD7         103   //Numeric keypad 7 key
#define VK_NUMPAD8         104   //Numeric keypad 8 key
#define VK_NUMPAD9         105   //Numeric keypad 9 key
#define VK_MULTIPLY        106   //Multiply key
#define VK_ADD             107   //Add key
#define VK_SEPARATOR       108   //Separator key
#define VK_SUBTRACT        109   //Subtract key
#define VK_DECIMAL         110   //Decimal key
#define VK_DIVIDE          111   //Divide key
#define VK_F1              112   //F1 key
#define VK_F2              113   //F2 key
#define VK_F3              114   //F3 key
#define VK_F4              115   //F4 key
#define VK_F5              116   //F5 key
#define VK_F6              117   //F6 key
#define VK_F7              118   //F7 key
#define VK_F8              119   //F8 key
#define VK_F9              120   //F9 key
#define VK_F10             121   //F10 key
#define VK_F11             122   //F11 key
#define VK_F12             123   //F12 key
#define VK_F13             124   //F13 key
#define VK_NUMLOCK         144   //NUM LOCK key
#define VK_SCROLL          145   //SCROLL LOCK key
#define VK_LSHIFT          160   //Left SHIFT key
#define VK_RSHIFT          161   //Right SHIFT key
#define VK_LCONTROL        162   //Left CONTROL key
#define VK_RCONTROL        163   //Right CONTROL key
#define VK_LMENU           164   //Left MENU key
#define VK_RMENU           165   //Right MENU key




int start()
  {
    if (GetAsyncKeyState(VK_LCONTROL) && GetAsyncKeyState(VK_0))
    Alert ("The 'ctrl+0' keys have been pressed, do you want me to do something?");
    return(0);
  }
http://www.metatrader.info/node/167

Chyba tego wszyscy szukali 8)

Godot
Stały bywalec
Stały bywalec
Posty: 32
Rejestracja: 09 kwie 2008, 17:46

Nieprzeczytany post autor: Godot »

Dobra robota reptile. Trzeba tylko dodać że w tym drugim przykładzie jest to rozwiązane za pomocą GetAsyncKeyState(), trzeba więc uprzedzić przyszłych użytkowników że jeżeli do klawisza "L" podepniemy akcje "kupuj" to to będzie ona realizowana nawet wtedy kiedy będziesz miał aktywne inne okno. W tym pierwszym przypadku chyba będzie podobnie bo wydaje mi się że w tej bibliotece jest po prostu założony hook na klawiaturę, ale nie sprawdzałem tego więc nie jestem pewien. W każdym razie sprawdźcie bo może się okazać że pisząc na forum będziecie składali zlecenia. Jeśli jestem w błędzie to niech mnie ktoś poprawi, ale chodzi o to że zarówno GetAsyncKeyState() jak i hook umieszczony w *.dll mają zasięg globalny. Niemniej na pewno wielu ludziom ułatwiłeś życie...

Awatar użytkownika
reptile
Maniak
Maniak
Posty: 2799
Rejestracja: 13 gru 2008, 13:48

Nieprzeczytany post autor: reptile »

Godot jak wiesz... nie jestem tutaj jeszcze programistą, ale kto wie... :wink:
* jak się nauczę zarabiać to pisać kod też będę musiał no chyba, że do 1 trzeba umieć 2 :?
Niemniej trzeba to teraz przetestować, a ja kodu składać jeszcze nie umiem, ale jak coś brzydko napiszesz, chętnie cię poprawie :lol: by było miłe dla oka :wink:

Dajcie znać gdy będzie mini EA z Sell i Buy .. nazwijcie go Reptile :lol:

ODPOWIEDZ