Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

W większości przypadków wystarczy podać wskaźnikowi wartość shift i będziesz miał szukaną wartość. Wskaźnik ZigZag jest trochę nietypowy.
Solą życia jest kasa.

Awatar użytkownika
siersciuch
Pasjonat
Pasjonat
Posty: 407
Rejestracja: 06 kwie 2010, 20:31

Nieprzeczytany post autor: siersciuch »

Dzieki, a
wytlumaczy mi ktoś te dwa parametry wskaźnika Zigzag ?

Kod: Zaznacz cały

 ExtDeviation=5;
ExtBackstep=3;
jeżeli będziesz uparty, prawdopodobnie częściej odniesiesz sukces, niż doznasz porażki.

uzin2
Gaduła
Gaduła
Posty: 184
Rejestracja: 01 lip 2009, 13:38

Nieprzeczytany post autor: uzin2 »

witam, co trzeba zrobic aby ea dzialal w kolko? tzn. mam jakis tam ea i po wypelnieniu wszystkich oczekiwanych warunkow ea otwiera pozycje ale gdy dochodzi do tp lub sl konczy prace, i nie statruje od nowa,

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

Wszystko tkwi w kodzie. Prawdopodobnie trzeba będzie go przepisać, zmodyfikować lub napisać od nowa. Nie ma uniwersalnej odpowiedzi na Twoje pytanie.
A może to skrypt a nie EA ?
Solą życia jest kasa.

uzin2
Gaduła
Gaduła
Posty: 184
Rejestracja: 01 lip 2009, 13:38

Nieprzeczytany post autor: uzin2 »

wlasnie problem w tym ze ea tworzylem za pomoca programu ktory udostepnia szablony na rozne funkcje, na programowaniu sie raczej nie znam, myslalem ze moze istnieje jakas funkcja dopisanie ktorej zalatwiloby sprawe,

Awatar użytkownika
mikolaj2
Gaduła
Gaduła
Posty: 231
Rejestracja: 04 maja 2011, 14:37

Nieprzeczytany post autor: mikolaj2 »

EA składa się z szablonu . Pusty szablon zawiera informacje dotyczące autora oraz trzy puste funkcje:

init() - funkcja ta jest wykonywana przy uruchamianiu systemu (tylko raz)

deinit() - funkcja ta jest wykonywana przy deaktywacji systemu (również tylko raz)

start() - jest to najważniejsza funkcja, wykonywana po otrzymaniu nowego ticku (nowej ceny)

Tak to wygląda od strony teoretycznej - bez odniesienia się do Twojego kodu się nie obędzie

uzin2
Gaduła
Gaduła
Posty: 184
Rejestracja: 01 lip 2009, 13:38

Nieprzeczytany post autor: uzin2 »

tutaj ten kod, moze bylby ktos tak mily i zerknal co jest nie tak ze nie startuje ponownie

Kod: Zaznacz cały

//-------------------------------------------------------------
//  Etasoft Inc. Forex EA and Script Generator version 4.1   EA
//-------------------------------------------------------------
// Keywords: MT4, Forex EA builder, create EA, expert advisor developer

#property copyright "Copyright © 2011, Etasoft Inc. Forex EA Generator v4.1"
#property link      "http://www.forexgenerator.com/"

#include <stdlib.mqh>
#include <WinUser32.mqh>

// exported variables
extern double SellLots8 = 0.1;
extern int SellStoploss8 = 20;
extern int SellTakeprofit8 = 40;
extern int PriceOffset8 = 20;
extern double BuyLots15 = 0.1;
extern int BuyStoploss15 = 20;
extern int BuyTakeprofit15 = 40;
extern int PriceOffset15 = 20;


// local variables
double PipValue=1;    // this variable is here to support 5-digit brokers
bool Terminated = false;
string LF = "\n";  // use this in custom or utility blocks where you need line feeds
int NDigits = 4;   // used mostly for NormalizeDouble in Flex type blocks
int ObjCount = 0;  // count of all objects created on the chart, allows creation of objects with unique names
int current = 0;

bool Executed9 = false;
bool Executed5 = false;


int init()
{
    NDigits = Digits;
    
    if (false) ObjectsDeleteAll();      // clear the chart
    
    
    Comment("");    // clear the chart
}

// Expert start
int start()
{
    if (Bars < 10)
    {
        Comment("Not enough bars");
        return (0);
    }
    if (Terminated == true)
    {
        Comment("EA Terminated.");
        return (0);
    }
    
    OnEveryTick12();
    
}

void OnEveryTick12()
{
    if (true == false && false) PipValue = 10;
    if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;
    
    IfOrderDoesNotExist7();
    IfOrderDoesNotExist6();
    
}

void IfOrderDoesNotExist7()
{
    bool exists = false;
    for (int i=OrdersTotal()-1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
        if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
        {
            exists = true;
        }
    }
    else
    {
        Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
    }
    
    if (exists == false)
    {
        ExecuteOnce9();
        
    }
}

void ExecuteOnce9()
{
    if (0 > 0)
    {
        Executed9 = false;
    }
    if (Executed9 == false)
    {
        Executed9 = true;
        SellPendingOrder8();
        
    }
}

void SellPendingOrder8()
{
    int expire = TimeCurrent() + 60 * 0;
    double price = NormalizeDouble(Ask, NDigits) - PriceOffset8*PipValue*Point;
    double SL = price + SellStoploss8*PipValue*Point;
    if (SellStoploss8 == 0) SL = 0;
    double TP = price - SellTakeprofit8*PipValue*Point;
    if (SellTakeprofit8 == 0) TP = 0;
    if (0 == 0) expire = 0;
    int ticket = OrderSend(Symbol(), OP_SELLSTOP, SellLots8, price, 0, SL, TP, "My Expert", 1, expire, Red);
    if (ticket == -1)
    {
        Print("OrderSend() error - ", ErrorDescription(GetLastError()));
    }
    
}

void IfOrderDoesNotExist6()
{
    bool exists = false;
    for (int i=OrdersTotal()-1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
        if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
        {
            exists = true;
        }
    }
    else
    {
        Print("OrderSelect() error - ", ErrorDescription(GetLastError()));
    }
    
    if (exists == false)
    {
        ExecuteOnce5();
        
    }
}

void ExecuteOnce5()
{
    if (0 > 0)
    {
        Executed5 = false;
    }
    if (Executed5 == false)
    {
        Executed5 = true;
        BuyPendingOrder15();
        
    }
}

void BuyPendingOrder15()
{
    int expire = TimeCurrent() + 60 * 0;
    double price = NormalizeDouble(Ask, NDigits) + PriceOffset15*PipValue*Point;
    double SL = price - BuyStoploss15*PipValue*Point;
    if (BuyStoploss15 == 0) SL = 0;
    double TP = price + BuyTakeprofit15*PipValue*Point;
    if (BuyTakeprofit15 == 0) TP = 0;
    if (0 == 0) expire = 0;
    int ticket = OrderSend(Symbol(), OP_BUYSTOP, BuyLots15, price, 0, SL, TP, "My Expert", 1, expire, Blue);
    if (ticket == -1)
    {
        Print("OrderSend() error - ", ErrorDescription(GetLastError()));
    }
    
}



int deinit()
{
    if (false) ObjectsDeleteAll();
    
    
}

Dajman
Bywalec
Bywalec
Posty: 5
Rejestracja: 30 gru 2011, 21:58

Nieprzeczytany post autor: Dajman »

Witam wszystkich,
pragnę się w moi pierwszym poście na tym forum zapytać odnośnie programowania w MQL4:

1) EA wykonuję się raczej w schematach, tak by inny programista w razie czego w nim się odnalazł, nachodzi mnie pytanie czy przestrzegając schematu można wykonywać ala kopiuj/wklej linijek kodów np.: buy limit w odpowiednim codo schematu miejsca? albo wkleić MM (money managmet

2) Za pomocą stron gdzie można stworzyć EA, np.: EA creator, to potrzeba znać dobrze język mql4 czy właśnie za pomocą tychże stron samemu można cosik potworzyć?

3) w kodzie na początku widnieje np.: int gi_228 = 0; i inne tego typu co to takiego i do czego to jest odniesienie??

Pozdrawiam i przy okazji pragnę życzyć wszystkiego najlepszego w nowym roku ! :-)

Awatar użytkownika
mikolaj2
Gaduła
Gaduła
Posty: 231
Rejestracja: 04 maja 2011, 14:37

Nieprzeczytany post autor: mikolaj2 »

1) Musiałbyś mieć dużo szczęścia, aby udało się Tobie wkleić kawałek EA do innego EA i wszystko zadziałało - jest to wręcz nie możliwe

2)Za pomocą tych stron można coś stworzyć :-) Jednak podstawy MQL4 pomogą Tobie zrozumieć kod i zasadę działania

3) int gi_228 = 0; - jest to definicja zmiennej gi_228 typu integer, której przypisano wartość 0 (więcej na ten temat znajdziesz np. tu : http://bossafx.pl/index.jsp?layout=fx_2 ... at_id=3134 ). Bez znajmości kodu całego programu nie można stwierdzić do czego wspomniana zmienna się odwołuje

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

Dajman pisze:1) EA wykonuję się raczej w schematach, tak by inny programista w razie czego w nim się odnalazł, nachodzi mnie pytanie czy przestrzegając schematu można wykonywać ala kopiuj/wklej linijek kodów np.: buy limit w odpowiednim codo schematu miejsca? albo wkleić MM (money managmet
Aż tak uniwersalnych schematów nie ma.
Czasem można jedną funkcję napisać na kilka sposobów. Dlatego istnieje coś takiego jak charakter programowania ( jak charakter pisma ), po którym można zozróżnić czy dany kod pisała ta sama osoba.
Jednego robota działającego w ten sam sposób można napisać na setki sposobów.
Więc nie ma czegoś takiego jak skopiowanie kawałka kodu i wklejenie go do innego EA tak, żeby to działało.
Wyjątkiem są pojedyncze funkcje, które umieszcz się na końcu kodu, ale ich wywłanie w kodzie to juz inna sprawa.
Solą życia jest kasa.

ODPOWIEDZ