Poszukuje programisty do współpracy przy kodowaniu

O jezykach programowania w platformach i nie tylko.
krzem78
Stały bywalec
Stały bywalec
Posty: 54
Rejestracja: 15 maja 2011, 18:18

Poszukuje programisty do współpracy przy kodowaniu

Nieprzeczytany post autor: krzem78 »

Cześć

Chciałbym nawiązać współpracę z programistą znającym język MQL4.
Potrzebuję potestować na back testach indywidualne strategie i pomysły.
Więcej w załączonym pliku.

krzem
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

JAREK67
Maniak
Maniak
Posty: 2143
Rejestracja: 13 lip 2006, 11:21

Re: Poszukuje programisty do współpracy przy kodowaniu

Nieprzeczytany post autor: JAREK67 »

krzem78 pisze:Cześć

Chciałbym nawiązać współpracę z programistą znającym język MQL4.
Potrzebuję potestować na back testach indywidualne strategie i pomysły.
Więcej w załączonym pliku.

krzem
Może po prostu naucz się programowania.
Tylko MQL5 nie MQL4, jeśli chcesz robić back testy na wielu parach jednocześnie.
Chyba taniej cię to wyniesie.

krzem78
Stały bywalec
Stały bywalec
Posty: 54
Rejestracja: 15 maja 2011, 18:18

Re: Poszukuje programisty do współpracy przy kodowaniu

Nieprzeczytany post autor: krzem78 »

@Jarek67
Zaczynam uczyć się programowania. A ponieważ jestem noga w tym temacie, to idzie mi to mozolnie.
Zaczynam od C++, ponieważ z tego co poczytałem jest podobny do MQL.
Czy Twoim zdaniem od razu zacząć od MQL5?
Czy Metatrader 4 współpracuje z MQL5 czy tylko z MQL4?

Awatar użytkownika
Mustafa
Pasjonat
Pasjonat
Posty: 769
Rejestracja: 20 lip 2010, 10:54

Re: Poszukuje programisty do współpracy przy kodowaniu

Nieprzeczytany post autor: Mustafa »

Nie musisz zaczynać od C++ mql jest łatwiejszy, największą barierą jest przestawienie się na 'myślenie abstrakcyjne', potem tylko szukasz szczegółów w dokumentacji.
Dla początkujących polecam ten ebook https://www.investmentuniversity.pl/e-b ... tomatyczny

Tak mql5 działa na mt4
Nie chodzi o to czy masz rację czy nie, tylko o to, co robisz kiedy masz rację lub jak się zachowujesz jeżeli racji nie masz.

JAREK67
Maniak
Maniak
Posty: 2143
Rejestracja: 13 lip 2006, 11:21

Re: Poszukuje programisty do współpracy przy kodowaniu

Nieprzeczytany post autor: JAREK67 »

Mustafa pisze:Nie musisz zaczynać od C++ mql jest łatwiejszy, największą barierą jest przestawienie się na 'myślenie abstrakcyjne', potem tylko szukasz szczegółów w dokumentacji.
Dla początkujących polecam ten ebook https://www.investmentuniversity.pl/e-b ... tomatyczny

Tak mql5 działa na mt4
Back testów na wielu parach jednocześnie nie zrobisz na MT4.

krzem78
Stały bywalec
Stały bywalec
Posty: 54
Rejestracja: 15 maja 2011, 18:18

Re: Poszukuje programisty do współpracy przy kodowaniu

Nieprzeczytany post autor: krzem78 »

Jak wchodzę z poziomu Metatrader4 do MQL (np poprzez F4) to oczywiście otwiera mi się MQL4. Nie wiem jak używać MQL 5 i kompilować do MT4. Ale odpowiedź na to pytanie pewnie dość łatwo znajdę w necie. Być może przesiąść się na MT5.

Back testy na kilku parach jednocześnie - myślę, że nie jest to warunek konieczny. Chciałbym jednak aby back test na danej parze uwzględniał trend na innych parach (korelacja) - być może to też jest niemożliwe na MQL4.

JAREK67
Maniak
Maniak
Posty: 2143
Rejestracja: 13 lip 2006, 11:21

Re: Poszukuje programisty do współpracy przy kodowaniu

Nieprzeczytany post autor: JAREK67 »

krzem78 pisze:Chciałbym jednak aby back test na danej parze uwzględniał trend na innych parach (korelacja) - być może to też jest niemożliwe na MQL4.
Testując jedną parę w testerze MT4, masz do dyspozycji jedynie wartości OLHC innych instrumentów.

krzem78
Stały bywalec
Stały bywalec
Posty: 54
Rejestracja: 15 maja 2011, 18:18

Re: Poszukuje programisty do współpracy przy kodowaniu

Nieprzeczytany post autor: krzem78 »

JAREK67 pisze:
krzem78 pisze:Chciałbym jednak aby back test na danej parze uwzględniał trend na innych parach (korelacja) - być może to też jest niemożliwe na MQL4.
Testując jedną parę w testerze MT4, masz do dyspozycji jedynie wartości OLHC innych instrumentów.
Myślę, że to powinno wystarczyć. Póki co trend definiuję przy użyciu średnich EMA, które przecież można obliczyć z OLHC.

Zakładam, że OLHC dla różnych TF i par walutowych poza tym, że posłuży jako baza do back testów, to już w trakcie uruchomienia systemu posłuży jako aktualizowana baza przy właściwym trejdingu.

-rookie-
Maniak
Maniak
Posty: 2307
Rejestracja: 13 kwie 2015, 19:00

Re: Poszukuje programisty do współpracy przy kodowaniu

Nieprzeczytany post autor: -rookie- »

Analiza kilku instrumentów oraz kilku ram czasowych jednocześnie jest w standardzie jforex. Tylko pytanie jak przeniesiesz zarządzanie na MT4. Ceny u brokerów mogą się różnić, ale czas otwarcia pozycji, czyli kiedy pojawi się sygnał będzie ten sam, więc możesz generować sygnały na jforex, połączyć to mostem z MT4 (niestety nie mam działającego mostu ale jest dostępny tutaj http://fxcraft.biz/ za opłatą i z supportem). Możesz też robić to bez mostu jeśli będziesz ręcznie zawierał pozycje np w formie alarmów dźwiękowych albo okienek popup kiedy masz sygnał oraz logów które będą zapisywały się do pliku tekstowego albo innego jak csv na dysku, taki track rekord sygnałów oraz tego co zwraca strategia. Pisze to tylko żebyś zainteresował się tym skoro MT4 nie pozwala na takie testy

Zobacz ten obrazek, wygenerowany jest równolegle sygnał MACD (histogram nad/pod osią 0) dla 3 instrumentów, ale możesz testować 24 tak jak zakładasz https://images84.fotosik.pl/1094/0183c3c2540ee050.png . I tak, dla USDJPY dało sygnał BUY, a dla EURUSD i GBPUSD sygnał SELL. Tylko coś pomieszałem wskaźniki na wykresie i w kodzie, ale to bez znaczenia teraz, bo to przyklad.

I to wszystko jest w standardzie jforex za FREE, tylko musiałbyś troche poznać język java.

Kod tej przykładowej strategii która jest tutaj na obrazku wygląd tak. Jak widzisz nie ma tego dużo, a już masz generowanie sygnałów z MACD dziennego. Teraz trzeba dopisać kolejne warunki twojej strategii, dodać wiecej instrumentów, potem zrobić te alerty i tak dalej, ale ja nie zamierzam się w tym grzebać, wrzucam żebyś wiedział że coś takiego można zrobić w JForex.

Kod: Zaznacz cały

package jforex;

import java.util.*;

import com.dukascopy.api.*;
import com.dukascopy.api.IEngine.OrderCommand;
import com.dukascopy.api.IIndicators.AppliedPrice;
import com.dukascopy.api.IIndicators.MaType;

import java.util.Date;

import java.text.*;

public class strategy_12062018_BetaTesty1 implements IStrategy {
    private IEngine engine;
    private IConsole console;
    private IHistory history;
    private IContext context;
    private IIndicators indicators;
    private IUserInterface userInterface;
    private IOrder order;
    private IChart chart;
    
    DateFormat dateFormat  = new SimpleDateFormat("yyyy.MM.dd - HH:mm:ss.SSS");
    
    private int counter = 0;

    public void onStart(IContext context) throws JFException {
        this.engine = context.getEngine();
        this.console = context.getConsole();
        this.history = context.getHistory();
        this.context = context;
        this.indicators = context.getIndicators();
        this.userInterface = context.getUserInterface();  

        dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
        
    }

    public void onAccount(IAccount account) throws JFException {}

    public void onMessage(IMessage message) throws JFException {}

    public void onStop() throws JFException {}

    public void onTick(Instrument instrument, ITick tick) throws JFException {}

    public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {
        
        double[] macdDaily = indicators.macd(instrument, Period.DAILY, OfferSide.BID, AppliedPrice.CLOSE, 12, 26, 9, 0);
        double[] macdOneHour = indicators.macd(instrument, Period.ONE_HOUR, OfferSide.BID, AppliedPrice.CLOSE, 12, 26, 9, 0);
        double[] macdFourHours = indicators.macd(instrument, Period.FOUR_HOURS, OfferSide.BID, AppliedPrice.CLOSE, 12, 26, 9, 0);
        
        if (instrument.equals(Instrument.EURUSD)) {
            checkTime(instrument, period, bidBar, macdDaily);
        } else if (instrument.equals(Instrument.GBPUSD)) {
            checkTime(instrument, period, bidBar, macdDaily);
        } else if (instrument.equals(Instrument.USDJPY)) {
            checkTime(instrument, period, bidBar, macdDaily);
        } else if (instrument.equals(Instrument.GBPJPY)) {
            checkTime(instrument, period, bidBar, macdDaily);
        } else if (instrument.equals(Instrument.EURJPY)) {
            checkTime(instrument, period, bidBar, macdDaily);
        } else if (instrument.equals(Instrument.USDCHF)) {
            checkTime(instrument, period, bidBar, macdDaily);
        }

    }
    
    public void checkTime(Instrument instrument, Period period, IBar bidBar, double[] macdDaily) throws JFException {

        Date date = new Date(bidBar.getTime());

        if (date.getHours() > 7 && date.getHours() < 9) { // 8 AM GMT
            //createSignal(instrument, period, bidBar, date);
        } else if (date.getHours() > 15 && date.getHours() < 17) { // 16 (4 PM) GMT           
            //createSignal(instrument, period, bidBar, date);
        } else if (date.getHours() > 20 && date.getHours() < 22) { // 21 (9 PM) GMT           
            //createSignal(instrument, period, bidBar, date);
            simpleCloseOrders(instrument, bidBar);
            // stop
            //context.stop();
        }
        
        createSignal(instrument, period, bidBar, date, macdDaily);
  
    }
    
    public void createSignal(Instrument instrument, Period period, IBar bidBar, Date date, double[] macdDaily) throws JFException {
        
        OrderCommand orderCommand;
        
        IBar dailyBar = history.getBar(instrument, Period.DAILY, OfferSide.BID, 0);
        ITick lastTick = history.getLastTick(instrument);
        
        // open position
        if (lastTick.getBid() > dailyBar.getOpen()) {
            orderCommand = OrderCommand.SELL;
            sendOrder(instrument, orderCommand);
        } else {
            orderCommand = OrderCommand.BUY;
            sendOrder(instrument, orderCommand);
        }
        
        //print( instrument + " " + macdDaily[0] + " " + macdDaily[1] + " " + macdDaily[2] );
        
        if (macdDaily[2] < 0) {
            // sell
            print( " sell " + instrument + " " + macdDaily[2] );
        } else {
            // buy
            print( " buy " + instrument + " " + macdDaily[2] );
        }
        
    }
    
    public void sendOrder(Instrument instrument, OrderCommand orderCommand) throws JFException {
        if (engine.getOrders(instrument).size() > 0) {
            return;
        }
        engine.submitOrder(getLabel(instrument), instrument, orderCommand, 0.001);
    }
    
    public void simpleCloseOrders(Instrument instrument, IBar bidBar) throws JFException {
        if (engine.getOrders().size() == 0) {
            return;
        }
        for (IOrder order : engine.getOrders()) {
             order.close();
        }
    }
    
    protected String getLabel(Instrument instrument) {
        Double random = Math.floor(Math.random() * 100); 
        String label = instrument.name();
        label = label + (counter ++) + random.intValue();
        label = label.toUpperCase();
        return label;
    }

    public void print(Object o) {
        console.getOut().println( o );
    }
    
}
Chyba nie z tej tablicy wzialem wartsci macd ale to bez znaczenia teraz, to tylko przykład jak zrobić takie sygnały dla kilku instrumentów jednocześnie. Chodzi o ten różowy słupkowy wykres macd, akurat tutaj chcialem pobrać dla przykładu ten sygnal do trendu, nad 0 buy, pod 0 sell.

krzem78
Stały bywalec
Stały bywalec
Posty: 54
Rejestracja: 15 maja 2011, 18:18

Re: Poszukuje programisty do współpracy przy kodowaniu

Nieprzeczytany post autor: krzem78 »

@rookie
Zapoznam się ze spokojem z treścią Twojego postu, na razie tylko szybko przeczytałem.

Od czego tu zacząć naukę programowania... Teraz piszesz o Javie / JForex. Sam już nie wiem. Nie można wszystkich srok za ogon. czy JForex to czysta Java, czy też analogia podobnie jak MQL do C++? Czy Java/JForex jest trudniejszy od MQL?

Akurat mam konto w Dukascopy, więc również i JForex. Z tym że znam go bardzo słabo, nawet ostatnio SL nie mogłem ustawić - pewnie gdzieś zablokowane w innych ustawieniach dziwna sprawa.
Korzystam z MT z uwagi na jego popularność.
JForex pewnie i technicznie wyprzedza MT, ale ma 2 wady:
- nie jest tak popularny, więc np. dyskusje na forach będą utrudnione
- jestem zmuszony do konta w Dukascopy a nie lubię być zmuszany (tak jak pisałem obecnie mam tam konto, ale to nie oznacza ze na zawsze).

A przenoszenie kodu z JForex do MT - z tego co czytałem pewnie i możliwe choć są też pewne problemy. Krótko mówiąc kolejne schody.

ODPOWIEDZ