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
Pasjonat
Pasjonat
Posty: 1563
Rejestracja: 30 lip 2019, 13:15
Kontakt:

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;
 }  
Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4.

Awatar użytkownika
ninjaproject
Pasjonat
Pasjonat
Posty: 1563
Rejestracja: 30 lip 2019, 13:15
Kontakt:

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.
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
Pasjonat
Pasjonat
Posty: 1563
Rejestracja: 30 lip 2019, 13:15
Kontakt:

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.
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
Pasjonat
Pasjonat
Posty: 1563
Rejestracja: 30 lip 2019, 13:15
Kontakt:

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.
Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4.

ODPOWIEDZ