noobie pytanie
Pokaż wyniki od 1 do 6 z 6

Wątek: noobie pytanie

  1. #1
    Czy ktoś może mi wyjaśnić, jak ten EA wylicza wielkość partii dla każdej transakcji, bo rozumiem bardzo mało w językach mt4.

    //| Oblicz optymalny rozmiar partii |
    // ----------------------------------------------- -------------------
    podwójne LotsOptimized ()
    {
    podwójna partia = dużo;
    int orders = HistoryTotal ();/Łączna liczba zamówień w historii
    int y = 0;/liczba zleceń bez przerwy
    //---- wybierz rozmiar partii
    lot = NormalizeDouble (AccountFreeMargin () * MaximumRisk1000.0,1);
    //---- oblicz liczbę rozkazów bez przerwy
    if (DecreaseFactorlt; 0)
    {
    dla (int i = order-1; igt; = 0; i--)
    {
    if (OrderSelect (i, SELECT_BY_POS, MODE_HISTORY) == false) {Drukuj (Błąd w historii!); przerwa; }
    if (OrderSymbol ()! = Symbol () || OrderType () gt; OP_SELL) kontynuuj;
    //----
    if (OrderProfit () gt; 0) break;
    if (OrderProfit () lt; 0) y ;
    }
    if (ygt; 1) lot = NormalizeDouble (lot-lot * yDecreaseFactor, 1);
    }
    //---- zwraca rozmiar partii
    jeśli (lotlt; 0,01) lot = 0,01;
    return (lot);

  2. #2
    z tej linii: double lot = Lots; ... if (ygt; 1) lot = NormalizeDouble (lot-lot * yDecreaseFactor, 1); najpierw masz początkowy rozmiar partii o nazwie Lots (spójrz na zmienną extern, na górze kodu), powiedzmy Lots = 0.2. następnie jest DecreaseFactor, powiedzmy DecreaseFactor = 5, jeśli twoje kolejne y są równe 2 (y większe niż 1), wtedy wielkość partii = 0.2 - 0.2 * 2/5 = 0.2 - 0.45 = 0.2 - 0.08 = 0.12 jest zaokrąglana do 1 kropka dziesiętna = gt; NormalizeDouble (..., 1) 0.12 = gt; 0,1 mam nadzieję, że ta pomoc

  3. #3
    Dziękuję, rozumiem teraz !!!!
    Cytat Zamieszczone przez ;
    z tej linii: double lot = Lots; ... if (ygt; 1) lot = NormalizeDouble (lot-lot * yDecreaseFactor, 1); najpierw masz początkowy rozmiar partii o nazwie Lots (spójrz na zmienną extern, na górze kodu), powiedzmy Lots = 0.2. następnie jest DecreaseFactor, powiedzmy DecreaseFactor = 5, jeśli twoje kolejne y są równe 2 (y większe niż 1), wtedy wielkość partii = 0.2 - 0.2 * 2/5 = 0.2 - 0.45 = 0.2 - 0.08 = 0.12 jest zaokrąglana do 1 kropka dziesiętna = gt; NormalizeDouble (..., 1) 0.12 = gt; 0,1 mam nadzieję, że ta pomoc
    Cytat Zamieszczone przez ;
    z tej linii: double lot = Lots; ... if (ygt; 1) lot = NormalizeDouble (lot-lot * yDecreaseFactor, 1); najpierw masz początkowy rozmiar partii o nazwie Lots (spójrz na zmienną extern, na górze kodu), powiedzmy Lots = 0.2. następnie jest DecreaseFactor, powiedzmy DecreaseFactor = 5, jeśli twoje kolejne y są równe 2 (y większe niż 1), wtedy wielkość partii = 0.2 - 0.2 * 2/5 = 0.2 - 0.45 = 0.2 - 0.08 = 0.12 jest zaokrąglana do 1 kropka dziesiętna = gt; NormalizeDouble (..., 1) 0.12 = gt; 0,1 mam nadzieję, że ta pomoc

  4. #4
    Jest coś jeszcze, czego nie rozumiem. Jeśli wolny margines konta wynosi 3000, a maksymalne ryzyko wynosi 0,01, wielkość partii powinna wynosić 3000 * .011000 = 0,03, ale EA ma tylko 0,01 wielkości partii. przy kilku okazjach EA otwiera .1 lot, gdy konto rośnie do 5000, ale w tym momencie powinno się otworzyć 5000 * .011000 = .05 lot./| Oblicz optymalny rozmiar partii |/ ----------------------------------------------- ------------------- double LotsOptimized () {double lot = Lots; int orders = HistoryTotal ();/zamówienia historii suma całkowita ilość = 0;/liczba zleceń bez przerwy/---- wybierz wielkość partii lot = NormalizeDouble (AccountFreeMarg in () * MaximumRisk1000.0,1);/---- obliczanie liczby zleceń bez przerwy, jeśli (Zmniejsz Factorlt; 0) {dla (int i = orders-1; igt; = 0; i--) {if (OrderEelect (i, SELECT_BY_POS, MODE _HISTORY ) == false) {Print (Błąd w historii!); przerwa; } if (OrderSymbol ()! = Symbol () || OrderType () gt; OP_SELL) kontynuuj;/---- if (OrderProfit () gt; 0) break; if (OrderProfit () lt; 0) y ; } if (ygt; 1) lot = NormalizeDouble (lot-lot * yDecreaseFactor, 1); }/---- zwraca wielkość partii, jeśli (lotlt; 0,01) lot = 0,01; return (lot);
    https://www.forex-instant.com/tradin...g-journal.html

  5. #5
    Wciąż nie rozumiem, dlaczego Ea nie otwiera właściwego rozmiaru partii. Cone womeone powiedz mi, co oznacza 1 w kodzie .... lot = NormalizeDouble (AccountFreeMarg in () * MaximumRisk1000.0,1);
    Cytat Zamieszczone przez ;
    Jest coś jeszcze, czego nie rozumiem. Jeśli wolny margines konta wynosi 3000, a maksymalne ryzyko wynosi 0,01, wielkość partii powinna wynosić 3000 * .011000 = 0,03, ale EA ma tylko 0,01 wielkości partii. przy kilku okazjach EA otwiera .1 lot, gdy konto rośnie do 5000, ale w tym momencie powinno się otworzyć 5000 * .011000 = .05 lot./| Oblicz optymalny rozmiar partii |/ ----------------------------------------------- ------------------- double LotsOptimized () {double lot = Lots; int orders = HistoryTotal ();/zamówienia historii suma całkowita ilość = 0;/...
    Cytat Zamieszczone przez ;
    Jest coś jeszcze, czego nie rozumiem. Jeśli wolny margines konta wynosi 3000, a maksymalne ryzyko wynosi 0,01, wielkość partii powinna wynosić 3000 * .011000 = 0,03, ale EA ma tylko 0,01 wielkości partii. przy kilku okazjach EA otwiera .1 lot, gdy konto rośnie do 5000, ale w tym momencie powinno się otworzyć 5000 * .011000 = .05 lot./| Oblicz optymalny rozmiar partii |/ ----------------------------------------------- ------------------- double LotsOptimized () {double lot = Lots; int orders = HistoryTotal ();/zamówienia historii suma całkowita ilość = 0;/...

  6. #6
    Cześć, wygląda na to, że z moją ostatnią odpowiedzią jest zła logika. funkcja najpierw obliczona wielkość partii nie ze zmiennej Lots, ale z: lot = NormalizeDouble (AccountFreeMarg in () * MaximumRisk1000.0,1); po pierwsze, o NormalizeDouble (.., 1), zwróci wartość z 1-cyfrową dokładnością. na przykład var1 = 5/8 = 0.625. NormalizeDouble (var1,2) = 0,63 gt; gt; gt; 2 cyfry po przecinku NormalizeDouble (var1,1) = 0,6 gt; gt; gt; 1 cyfra po przecinku z twojej skrzynki, AccountFreeMargin = 3000 MaximumRisk = 0.01 AccountFreeMargin * MaximumRisk1000 = 3000 * 0.011000 = 0.03 lot = NormalizeDouble (0.03,1) = 0.0 !!! wartość 3 jest pomijana, ponieważ znajduje się na drugiej pozycji, liczonej od lewej po przecinku, a następnie przed zwróceniem wyniku:/---- zwraca wielkość partii, jeśli (lotlt; 0,01) lot = 0,01; return (lot); dlatego, że obliczona partia powyżej wyniku 0, która jest mniejsza niż 0,01, funkcja zwróciła 0.01; ostatnią rzeczą, powinieneś użyć, jeśli (DecreaseFactorgt; 0) zamiast tego (DecreaseFactorlt; 0), i upewnij się, że wartość DecreaseFactor jest wartością dodatnią (na przykład 3) nadzieję, że ta pomoc

Uprawnienia umieszczania postów

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Używamy cookies
Używamy cookies, aby jak najlepiej dostosować witrynę do Twoich potrzeb. Kontynuowanie przeglądania tej strony, oznacza zgodę na używanie plików cookies. Aby uzyskać więcej informacji zapoznaj się z naszą Polityką Prywatności.