Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
Online
Awatar użytkownika
ninjaproject
Maniak
Maniak
Posty: 2535
Rejestracja: 30 lip 2019, 13:15

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

Zamknięcie ręczne nie zmieni komentarza, to niemożliwe.
Chyba, że sobie zrobisz coś, np. etykietę, na której kliniesz żeby zamknąć zlecenie, to wtedy możesz w tym zdarzeniu zawrzeć:
Print("Zlecenie zamknięte ręcznie: ",OrderTicket());
I to wtedy odczytasz w logu.
Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4.

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

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
                  if(sparam=="Etykieta"+orderticket)
                   {
                   // funkcja zamykająca dane zlecenie
                   OrdersClose(orderticket);  
                   }
      }
  }
     
Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4.

blashka
Stały bywalec
Stały bywalec
Posty: 36
Rejestracja: 27 lis 2020, 18:12

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: blashka »

Hej,
Czy jest ktoś w stanie podpowiedzieć czy kod który napisałem a raczej warunki które tam umieściłem, wykonują moje założenia? Jest to proste EA bazujące na stochu. Chce aby pozycja kupna otwierała się w momencie gdy obydwie linie są ponad wartością 80 ( nie w momencie ich przecięcia czy coś w tym stylu - po prostu powyżej), oraz pozycje sprzedaży gdy obydwie linie są poniżej 20. Zamknięcie kupna gdy znowu spadną poniżęj 80 i zamknięcie sprzedaży gdy są powyżej 20. Z góry dzięki za pomoc.
#property strict
#property show_inputs

int ticket;
int orderClose;
input double lots = 0.01;

void OnTick()
{
double K = iStochastic(_Symbol,_Period,5,3,3,MODE_SMA,0,MODE_MAIN,0);
double D = iStochastic(_Symbol,_Period,5,3,3,MODE_SMA,0,MODE_SIGNAL,0);

if(K > 80 && D > 80 /*&& D > K*/ && OrdersTotal() == 0){
ticket = OrderSend(_Symbol,OP_BUY,lots,Ask,3,0,0);
}
if(K < 20 && D < 20/* && D < K*/ && OrdersTotal() == 0){
ticket = OrderSend(_Symbol,OP_SELL,lots,Bid,3,0,0);
}
if(K < 80 && D < 80 /*&& D > K*/ && OrdersTotal() > 0){
if(OrderSelect(ticket,SELECT_BY_TICKET))
if(OrderType() == OP_BUY)
orderClose = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3);
}
if(K > 20 && D > 20 /*&& D < K*/ && OrdersTotal() > 0){
if(OrderSelect(ticket,SELECT_BY_TICKET))
if(OrderType() == OP_SELL)
orderClose = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),3);
}

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

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

Nie, ten kod nie wykona twoich założeń, ponieważ nie rozumiesz co napisałeś.
Meta Editor zawiera wszystkie potrzebne funkcje i podpowiedzi.
Radzę z nich korzystać.

https://book.mql4.com/trading/ordersend
https://docs.mql4.com/trading/ordersend

https://book.mql4.com/trading/orderclose
https://docs.mql4.com/trading/orderclose

https://docs.mql4.com/trading/orderselect
Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4.

blashka
Stały bywalec
Stały bywalec
Posty: 36
Rejestracja: 27 lis 2020, 18:12

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: blashka »

Wydaje mi się że w funkcji OrderSend nie ma błędu więc nie rozumiem po co wysyłasz linki do tego zagadnienia. Pytanie było skierowane w stronę warunków. Chyba że jest inaczej wtedy proszę abyś mnie o tym uświadomił.

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

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

Przykładowa funkcja OrdersCloseAll():

Kod: Zaznacz cały

//+------------------------------------------------------------------+
void OrdersCloseAll()
   {
  int total = OrdersTotal();
  bool result = false; 
  for(int cnt=total-1;cnt>=0;cnt--)
   {
    if(OrderSelect(cnt, SELECT_BY_POS,MODE_TRADES))
    int ordertype   = OrderType();
    if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic_Number&&OrderComment()==orderComment)
     {
    switch(ordertype)
     {
      //Close opened long positions
      case OP_BUY       : result = OrderClose( OrderTicket(), OrderLots(), Bid, 0, clrNONE );
                          sType = "Buy";
                          break;
      
      //Close opened short positions
      case OP_SELL      : result = OrderClose( OrderTicket(), OrderLots(), Ask, 0, clrNONE );
                          sType = "Sell";
                          
     }
    
    if(result == false)
     {
      Print(OrderComment()," Zamknięcie transakcji " , OrderTicket() ," ",sType, " nieskuteczne. Błąd:" , GetLastError() );
      Sleep(500);
     }
     else 
     { 
      Print(OrderComment()," Zamknięcie transakcji " , OrderTicket(), " ",sType, " skuteczne.");   
      PlaySound("ok.wav");
     }  
    }
   }
   }
//+------------------------------------------------------------------+
Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4.

blashka
Stały bywalec
Stały bywalec
Posty: 36
Rejestracja: 27 lis 2020, 18:12

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: blashka »

No okej, zawsze pisałem boty w ten sposób i wszystko działa więc dalej nie rozumiem Twojej odpowiedzi. Poza tym w moim kodzie pozycje otwierają i zamykają się prawidłowo. Chyba że są jakieś błędy logiczne których nie umiem wychwycić bo dopiero zaczynam. Ale dalej wydaje mi się że nie dostałem odpowiedzi na moje pytanie.

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

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

Odnośnie zamykania:
1. Nie masz pętli, i nie wiem jak to ma działać?
Tylko fuksem, ponieważ robisz tylko jedno zlecenie w danym czasie.
2. Nie badasz OrdersTotal().
3. Skąd bierzesz OrderClosePrice(), skoro badasz pozycje otwarte a nie zamknięte?

A co do warunków Stocha, to co tu by miało być źle?
Tyle, że ty badasz świecę 0, czyli bieżącą.
I tego nie rozumiem, po co badać świecę jeszcze niezamkniętą?
Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4.

blashka
Stały bywalec
Stały bywalec
Posty: 36
Rejestracja: 27 lis 2020, 18:12

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: blashka »

No i teraz ładnie wiem o co chodzi.Dzięki za wskazówki. Co do pętli to myślałem że sprawdzanie ticketami jest w porządku. Czyli zmienić na sprawdzanie poprzez pętle. O tym że badam świece bierzącą akurat wiem, testowałem sobie które daje dokładniejsze wyniki. Zazwyczaj używam poprzedniej czyli 1.

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

Re: Wszystkie pytania dozwolone początkujących programistów

Nieprzeczytany post autor: ninjaproject »

Warto pisać sobie funkcje, a w programie tylko odwoływać się do tych funkcji, to ułtawia programowanie, bo raz napisaną funkcję możesz potem stosować uniwersalnie. No i, jednak wyrzucanie Print() do logów się bardzo przydaje, gdy testujemy poprawność działania bota.
Mentor/trener, aka. Dadas, fx-technik, obecnie ninjaproject.
Programuję wskaźniki i EA do MetaTrader 4.

ODPOWIEDZ