Kod blokujący pozostałe transakcje na danej parze walutowej.

O jezykach programowania w platformach i nie tylko.
Krzysztof z Bydzi
Stały bywalec
Stały bywalec
Posty: 21
Rejestracja: 24 sty 2013, 15:24

Kod blokujący pozostałe transakcje na danej parze walutowej.

Nieprzeczytany post autor: Krzysztof z Bydzi »

Witam.
Poproszę o radę. Chodzi mi oto aby strategia zablokowała następne transakcje danej pary walutowej (transakcje na innych walutach moją być dozwolone) Wiem, że mogę użyć:

Kod: Zaznacz cały

string trade="";                              
      int Orders=OrdersTotal();
      if (Orders==0)
      {  
      trade="buy";
      }
Ale to zablokokuje każdą następną transakcję także na innej walucie. Chodzi mi (poproszę) o kod blokujący tylko jedną parę walutową.
Poniżej zamieszczam cały swój kod:

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                              Sprzedaj USDJPY.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
void OnTick()
 {
      string spread="";
      int    intMarketSpreadPoints = MarketInfo( _Symbol, MODE_SPREAD );                            
      double dblMarketSpreadPrice  = intMarketSpreadPoints * _Point; 
      if (dblMarketSpreadPrice==0.060)
      {  
      spread="buy";
      }
      string trade="";
      int Orders=OrdersTotal();
      for(int pos=0;pos<Orders;pos++)
      {
      if(OrderSelect(pos,SELECT_BY_POS)==false) continue;
            {
            if OrderSymbol()==USDJPY.;
            {
            trade="buy";
            }
      }}
      if (trade=="buy" && spread=="buy")
            {
            //--- get minimum stop level
            double minstoplevel=MarketInfo(Symbol(),MODE_STOPLEVEL);
            Print("Minimum Stop Level=",minstoplevel," points");
            double price=Ask;
            //--- calculated SL and TP prices must be normalized
            //double stoploss=Ask-75*Point;
            double stoploss=NormalizeDouble(Ask-30*Point,Digits);
            double takeprofit=NormalizeDouble(Ask+30*Point,Digits);
            // double takeprofit=Ask+75*Point;
            //--- place market order to buy 1 lot
            int ticket=OrderSend(Symbol(),OP_BUY,0.1,price,5,stoploss,takeprofit,"My Order",16384,0,clrGreen);
             }
          }
   
Kod szału nie robi. Pewnie są też są tam inne błędy. Ale poproszę chodzi mi tylko o urywek blokujący kupno po pierwszej transakcji danej pary walutowej w tym wypadku USDJPY. Tego samego dnia chciałbym kupić jeszcze inną parę walutową, ok?

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 2167
Rejestracja: 30 lip 2019, 13:15

Re: Kod blokujący pozostałe transakcje na danej parze walutowej.

Nieprzeczytany post autor: ninjaproject »

Para walutowa jest zawarta w funkcji:

Kod: Zaznacz cały

_Symbol
A więc, możesz sobie napisać:

Kod: Zaznacz cały

input string Zabroniony_Symbol = "EURUSD";
i przed kodem egzekucyjnym transakcji np.:

Kod: Zaznacz cały

if(_Symbol == Zabroniony_Symbol)
 {
 return;
 }  
Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4.

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 2167
Rejestracja: 30 lip 2019, 13:15

Re: Kod blokujący pozostałe transakcje na danej parze walutowej.

Nieprzeczytany post autor: ninjaproject »

A tak poza tym, to:

Kod: Zaznacz cały

 if(OrderSymbol()=="USDJPY.")
Oczywiście, jeżeli ta kropka rzeczywiście u brokera występuje.
Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4.

Krzysztof z Bydzi
Stały bywalec
Stały bywalec
Posty: 21
Rejestracja: 24 sty 2013, 15:24

Re: Kod blokujący pozostałe transakcje na danej parze walutowej.

Nieprzeczytany post autor: Krzysztof z Bydzi »

Kod poprawiłem i przetestowałem. Ale okazuje, że strategia zamiast wykonać jedną operację kupna dokonuje nawet pięciu za jednym zamachem . Poniżej zmieniony kod:

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                              Sprzedaj USDHKD.mq4 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
void OnTick()
 {
      string spread="";
      int    intMarketSpreadPoints = MarketInfo( _Symbol, MODE_SPREAD );                            
      double dblMarketSpreadPrice  = intMarketSpreadPoints * _Point; 
      if (dblMarketSpreadPrice==0.0008)
      {  
      spread="buy";
      }
      string trade="";
      int Orders=OrdersTotal();
      for(int pos=0;pos<Orders;pos++)
      {
      if(OrderSelect(pos,SELECT_BY_POS)==false) continue;
            if (OrderSymbol()!=_Symbol)
            {
            trade="buy";
            }
      }
      if (trade=="buy" && spread=="buy")
            {
            //--- get minimum stop level
            double minstoplevel=MarketInfo(Symbol(),MODE_STOPLEVEL);
            Print("Minimum Stop Level=",minstoplevel," points");
            double price=Ask;
            //--- calculated SL and TP prices must be normalized
            //double stoploss=Ask-75*Point;
            double stoploss=NormalizeDouble(Ask-24*Point,Digits);
            double takeprofit=NormalizeDouble(Ask+24*Point,Digits);
            // double takeprofit=Ask+75*Point;
            //--- place market order to buy 1 lot
            int ticket=OrderSend(Symbol(),OP_BUY,0.1,price,5,stoploss,takeprofit,"My Order",16384,0,clrGreen);
             }
          }
   
Więc tak nie może być.

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 2167
Rejestracja: 30 lip 2019, 13:15

Re: Kod blokujący pozostałe transakcje na danej parze walutowej.

Nieprzeczytany post autor: ninjaproject »

Jeżeli nie napisałeś instrukcji, żeby EA zawierało tylko jedną pozycję, albo ile chcesz, to skąd EA ma wiedzieć?
EA jedynie wykonuje to, co programista zakoduje - nic innego EA nie umie zrobić.
Jeżeli chcesz, żeby EA otwierało konkretną ilość transakcji, to potrzebujesz odczytać czy jest tyle otwartych, czy nie.
Trzeba się uczyć, krok po kroku.
Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4.

Krzysztof z Bydzi
Stały bywalec
Stały bywalec
Posty: 21
Rejestracja: 24 sty 2013, 15:24

Re: Kod blokujący pozostałe transakcje na danej parze walutowej.

Nieprzeczytany post autor: Krzysztof z Bydzi »

Staram się uczyć. Znalazłem to:
https://www.youtube.com/watch?v=vOkwXJ2xIqI
Przepisałem. Nic mi to nie dało. Poproszę. Czy mógłby ktoś podesłać linka z kodem lub wytłumaczeniem jak zaprogramować blokadę następnych zleceń po pierwszej transakcji na danej parze walutowej?

Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 2167
Rejestracja: 30 lip 2019, 13:15

Re: Kod blokujący pozostałe transakcje na danej parze walutowej.

Nieprzeczytany post autor: ninjaproject »

Dokumentacja MQL4 znajduje się tutaj:
https://www.mql4.com/

Jeżeli chcesz więcej pomocy, to zapraszam na Dadas Trading Room Discord server.
Link znajdziesz w moim profilu, ten link do WWW.
Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4.

ODPOWIEDZ