Poszukuję kogoś kto zrobił by dla mnie prosty automat

O jezykach programowania w platformach i nie tylko.
Zlepek
Bywalec
Bywalec
Posty: 16
Rejestracja: 30 sie 2018, 09:00

Poszukuję kogoś kto zrobił by dla mnie prosty automat

Nieprzeczytany post autor: Zlepek »

Witam. Chciałem przeprowadzić pewien eksperyment i potrzebuję w miarę prostego automatu. Automat do mt4 miał by porównać cenę otwarcia i zamknięcia poprzedniego dnia i o określonej godzinie otworzyć pozycję krótką albo długą ustawi sl po czym o określonej godzinie zamyka pozycję ewentualnie przestawia sl. Ktoś coś ?

-- Dodano: 30 sie 2018, 12:34 --

Zapomniałem dodać że jeśli będzie trzeba to oczywiście zapłacę ;) Chyba że się znajdzie jakaś duszyczka co zrobi to dla zabawy.

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

Re: Poszukuję kogoś kto zrobił by dla mnie prosty automat

Nieprzeczytany post autor: -rookie- »

A ja chce czerwone ferrari i sto tysiecy milionów dolarów...
Nie ma opcji z przesuwaniem SL, jest prosty mechanizm otwierania w określonych godzinach oraz zamykania o określonej godzinie. Przykład otwiera pozycje o 8 rano i zamyka o 14. Jeśli cena o 8 jest nad Open poprzedniej świecy otwiera BUY, jeśli jest pod otwiera SELL. Stwórz nowy plik w kreatorze EA o nazwie EATime31082018 i wklej ten kod.

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                               EATime31082018.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern int MagicNumber = 100;
extern int Slippage = 3;
extern double LotSize = 0.1;
int counter = 0;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
      MqlTick lastTick;

      if (Hour() > 7 && Hour() < 9) {
         // open order
         if(SymbolInfoTick(Symbol(),lastTick)) {
            //Print( lastTick.bid );
            if (lastTick.bid > iOpen(Symbol(), PERIOD_D1, 1)) {
               sendBuyOrder();
            } else {
               sendSellOrder();
            }
         }
         
      }
      
      if (Hour() == 14) {
         // close order
         manuallyCloseOrder();
      }
   
      //Print( iOpen(Symbol(), PERIOD_D1, 1) );
      //Print( iLow(Symbol(), PERIOD_D1, 1) );
      //Print( iHigh(Symbol(), PERIOD_D1, 1) );
      
   
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) {}
//+------------------------------------------------------------------+

void sendBuyOrder() {
   if (OrdersTotal() > 0) return;
   OrderSend(Symbol(), OP_BUY, LotSize, Ask, Slippage, 0, 0,"Buy[" + counter +"]", MagicNumber, 0, clrGreen);
   counter++;
}

void sendSellOrder() {
   if (OrdersTotal() > 0) return;
   OrderSend(Symbol(), OP_SELL, LotSize, Bid, Slippage, 0, 0,"Sell[" + counter +"]", MagicNumber, 0, clrRed);
   counter++;
}

void manuallyCloseOrder() {
   for(int i=OrdersTotal(); i>=0; i--) {
      if(OrderSelect(i, SELECT_BY_POS)==true) {
         if (OrderType() == 0) {
            OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 0, clrNONE);
         } else if (OrderType() == 1) {
            OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 0, clrNONE);
         }
      }
   }
}
A teraz wyjaśnienie konkretnych linijek kodu

Tutaj ustawiasz między jakimi godzinami ma BUDOWAĆ POZYCJE, tak możesz ustalić godziny pomiędzy którymi będzie otwierało pozycje np co 5 minut albo będzie otwierało do póki starczy marginu, ale...

Kod: Zaznacz cały

if (Hour() > 7 && Hour() < 9) {
...ja zablokowałem możliwość dodawania kolejnych pozycji przerywając funkcje warunkiem if (OrdersTotal() > 0) return; - OrdersTotal() pokazuje ilość wszystkich pozycji, więc jeśli jest otwarta 1 pozycja to ta funkcja zwraca 1, więc ten warunek sprawdza czy jest więcej od 0, i jeśli jest otwarta jakaś pozycja wtedy return przerywa funkcje na początku, zanim przejdzie do kolejnych linijek kodu gdzie jest wysłanie zlecenia. Poczytaj o funkcjach, o przerywaniu funkcji returnem etc. Jeśli skasujesz ten fragment if (OrdersTotal() > 0) return; to zobaczysz że nawali Ci pozycjami.

Kod: Zaznacz cały

void sendBuyOrder() {
   if (OrdersTotal() > 0) return;
   OrderSend(Symbol(), OP_BUY, LotSize, Ask, Slippage, 0, 0,"Buy[" + counter +"]", MagicNumber, 0, clrGreen);
   counter++;
}
Następnie masz warunki do otwarcia pozycji w instrukcji warunkowej która sprawdza godzinę. Skup się dokładnie na tej linijce kodu if (lastTick.bid > iOpen(Symbol(), PERIOD_D1, 1)) - tutaj sprawdzasz czy cena BID ostatniego Ticka jest większa od OPEN poprzedniego dnia. Tutaj masz dokumentacje https://docs.mql4.com/series/iopen jak wyciągać poszczególne informacje o świecy z danego interwału, ale Ciebie interesuje świeca Daily z poprzedniego dnia więc to będzie iOpen(Symbol(), PERIOD_D1, 1) - 1 na końcu oznacza 1 świece wstecz, czyli poprzednią świece. I w zależności gdzie jest cen BID w stosunku do otwarcia poprzedniego dnia otworzy BUY lub SELL. jeśli nie wiesz co to są instrukcje warunkowe if else to poczytaj o tym.

Kod: Zaznacz cały

if(SymbolInfoTick(Symbol(),lastTick)) {
            //Print( lastTick.bid );
            if (lastTick.bid > iOpen(Symbol(), PERIOD_D1, 1)) {
               sendBuyOrder();
            } else {
               sendSellOrder();
            }
         }
Jeśli chcesz sprawdzić inne warunki np porównać ostatni Tick w danej godzinie do Close poprzedniej świecy D1 wtedy dajesz zamiast iOpen(Symbol(), PERIOD_D1, 1) ---> iClose(Symbol(), PERIOD_D1, 1)
Jeszcze raz wrzucam dokumentacje o tym https://docs.mql4.com/series/iclose

Kod: Zaznacz cały

if(SymbolInfoTick(Symbol(),lastTick)) {
            //Print( lastTick.bid );
            if (lastTick.bid > iClose(Symbol(), PERIOD_D1, 1)) {
               sendBuyOrder();
            } else {
               sendSellOrder();
            }
         }
Pozycje zamykasz o konkretnej godzinie, ustawiłem że o 14 dla przykładu

Kod: Zaznacz cały

if (Hour() == 14) {
         // close order
         manuallyCloseOrder();
      }
Masz wstępny kod, możesz już go pozmieniać według własnego uznania, z resztą sam pokombinuj.

-- Dodano: 31 sie 2018, 10:40 --

Chyba nie musze pisać że możesz to sprawdzić na testerze historycznym...

Zlepek
Bywalec
Bywalec
Posty: 16
Rejestracja: 30 sie 2018, 09:00

Re: Poszukuję kogoś kto zrobił by dla mnie prosty automat

Nieprzeczytany post autor: Zlepek »

Pięknie dziękuję. Wrzucam i będę kombinował. Nie wrzucę tego na historyczny bo to nie ma sensu. Nie cofnę się w przeszłość i nie odpalę go do zarabiania. Będzie testowany na realu ale spokojnie na mikrolotach

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

Re: Poszukuję kogoś kto zrobił by dla mnie prosty automat

Nieprzeczytany post autor: -rookie- »

Zlepek pisze:Pięknie dziękuję. Wrzucam i będę kombinował. Nie wrzucę tego na historyczny bo to nie ma sensu. Nie cofnę się w przeszłość i nie odpalę go do zarabiania. Będzie testowany na realu ale spokojnie na mikrolotach
Zła decyzja. Masz teraz weekend. Możesz pozmieniać godziny w tym krótkim kodzie i sprawdzić np otwarcie od 8 do 10, czyli o 9, a zamknięcie o 22 itd. Możesz dać inny instrument. Wyciągnąć z tego wnioski, wprowadzić potem poprawki, znaleźć bardziej optymalny wariant. Jak włączysz to na realnym rynku to stracisz czas zanim dostaniesz wyniki musisz czekać te kilka godzin, a żeby dostać wyniki w dłuższej serii zagrań, zobaczyć krzywą kapitału itp minął dni. Dlatego jest tester historyczny. I lepiej naucz się z niego korzystać jeśli jeszcze nie używałeś. Zrób ten plik tak jak napisałem, wrzuć ten kod do niego i potem na historii sprawdź jak w danym okresie zachowuje się dane ustawienie. Możesz przecież jeszcze sprawdzić otwieranie po cenie CLOSE bo dałem w przykładowym kodzie OPEN poprzedniej świecy.

TESTER HISTORYCZNY ODPAL NA WEEKENDZIE I SPRÓBUJ POZMIENIAĆ GODZINY W KODZIE I TESTUJ NA HISTORII, DOPIERO POTEM ZOBACZYSZ CZY W OGÓLE MA SENS WŁĄCZANIE TEGO NA DEMO ALBO NAWET NA REALNYM KONCIE Z MIKROLOTAMI.

...

Pewnie nawet nie wiesz o czym piszę... opis ja włączyć tester
https://images90.fotosik.pl/28/c1e639724c367ffa.png

Zlepek
Bywalec
Bywalec
Posty: 16
Rejestracja: 30 sie 2018, 09:00

Re: Poszukuję kogoś kto zrobił by dla mnie prosty automat

Nieprzeczytany post autor: Zlepek »

Dobra wszystko ogarnąłem wiem już co i jak zmiana godzin ilość świec do zbadania itp. rozkminione. Pytanie tylko jest teraz następujące. Czy da się do tego podczepić stały sl ? powiedzmy 20 pipsów albo coś takiego ?

Zlepek
Bywalec
Bywalec
Posty: 16
Rejestracja: 30 sie 2018, 09:00

Re: Poszukuję kogoś kto zrobił by dla mnie prosty automat

Nieprzeczytany post autor: Zlepek »

Kilka pytań do.

Kod: Zaznacz cały

if (Hour() > 7 && Hour() < 9) {
Jeśli napiszę

Kod: Zaznacz cały

if (Hour()== 18 ) {
Otworzy pozycję konkretnie o godzinie 18. i właśnie o to mi chodziło o konkretnej godzinie dokładnie 1 pozycja. Teraz najwięcej problemów sprawia mi ten kod.

Kod: Zaznacz cały

if(SymbolInfoTick(Symbol(),lastTick)) {
            //Print( lastTick.bid );
            if (lastTick.bid > iOpen(Symbol(), PERIOD_D1, 1)) {
               sendBuyOrder();
            } else {
               sendSellOrder();
            }
         }
Czyli sprawdza mi poprzednią świecę D1. i teraz pytanie czy on pobiera cenę zamknięcia tej świecy otwarcia ?
Bo już rozkminiłem to troszeczkę i chciałem się zapytać czy mam rację.

Kod: Zaznacz cały

if(SymbolInfoTick(Symbol(),lastTick)) {
            //Print( lastTick.bid );
            if (lastTick.bid > iOpen(Symbol(), PERIOD_H1, 3 )){
               sendBuyOrder();
            } else {
               sendSellOrder();
Tu wychodziło by na to że otwarta pozycja będzie o godzinie 18 sprawdzając cenę o godzinie 15. Teraz moje pytanie czy ten kod sprawdza mi cenę zamknięcia świeczki H1 o godzinie 15 ?
No i kolejne pytanie. Czy da się do tego podczepić jakoś SL ?

grzesq
Stały bywalec
Stały bywalec
Posty: 30
Rejestracja: 10 lip 2009, 16:57

Re: Poszukuję kogoś kto zrobił by dla mnie prosty automat

Nieprzeczytany post autor: grzesq »

Kod: Zaznacz cały

iOpen(Symbol(), PERIOD_H1, 0 )
Zwroci ci cene otwarcia aktualnego bara.

Kod: Zaznacz cały

iOpen(Symbol(), PERIOD_H1, 3 )
Zwroci ci cene otwarcia przesunieta o 3 bary wstecz czyli w Twoim przypadku bedzie to bar z godziny 15.

Jezeli chcesz cene zamkniecia to musisz uzyc iClose

Czy da się do tego podczepić jakoś SL ?
SL i/lub TP ustawiasz w funkcji OrderSend

np.

Kod: Zaznacz cały

double SL = 1.11111;
double TP = 1.22222;
OrderSend(Symbol(), OP_BUY, LotSize, Ask, Slippage, SL , TP, "Buy[" + counter +"]", MagicNumber, 0, clrGreen);
P.S.
Linki do dokumentacji
https://docs.mql4.com/ lub jezeli nie ogarniasz po angielsku to http://bossafx.pl/fx/narzedzia/automatyzacja/

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

Re: Poszukuję kogoś kto zrobił by dla mnie prosty automat

Nieprzeczytany post autor: -rookie- »

To juz chcesz jakies cuda na kiju teraz heh
Więc o godzinie 18 chciałbyś sprawdzić świece H1 z godziny 15...
Następnie z close tej świecy H1 wziąć cene close jako stop loss
czyli to będzie świeca z 15 jeśli dać shift = 3 od 18
I nie ma zamykac o konkretnej godzinie tylko na SL albo TP
To wygląda mniej więcej tak https://images92.fotosik.pl/29/5a4c1aaf4524ae52.png
Tylko według czego ma otwierać wtedy BUY lub SELL ?!
Ustawiłem że według tej świecy, według właśnie ceny CLOSE tej H1 3 świece wstecz od 18
i jeśli o 18 jest nad close to BUY, pod close wyślij zlecenie SELL
Ok, już tyle pomocy, teraz dokumentacja MQL https://docs.mql4.com/ i nauka metodą prób i błędów co jak działa.

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                     EATime31082018_BetaTest2.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern int MagicNumber = 100;
extern int Slippage = 3;
extern double LotSize = 0.1;
int counter = 0;

extern int SL_POINT = 10;
extern int TP_POINT = 30;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
      MqlTick lastTick;
      
      /*
      if (Hour() > 7 && Hour() < 9) {
         // open order
         if(SymbolInfoTick(Symbol(),lastTick)) {
            //Print( lastTick.bid );
            if (lastTick.bid > iClose(Symbol(), PERIOD_D1, 1)) {
               sendBuyOrder();
            } else {
               sendSellOrder();
            }
         }
         
      }
      */
      
      if (Hour() == 18) {
         // open order
         if(SymbolInfoTick(Symbol(),lastTick)) {
            //Print( lastTick.bid );
            if (lastTick.bid > iClose(Symbol(), PERIOD_H1, 3)) {
               //Print( iClose(Symbol(), PERIOD_H1, 3) );
               double sl_price = iClose(Symbol(), PERIOD_H1, 3);
               sendBuyOrder(sl_price);
            } else {
               //Print( iClose(Symbol(), PERIOD_H1, 3) );
               double sl_price = iClose(Symbol(), PERIOD_H1, 3);
               sendSellOrder(sl_price);             
            }
         }
         
      }
     
      if (Hour() == 14) {
         // close order
         //manuallyCloseOrder();
      }
   
      //Print( iOpen(Symbol(), PERIOD_D1, 1) );
      //Print( iLow(Symbol(), PERIOD_D1, 1) );
      //Print( iHigh(Symbol(), PERIOD_D1, 1) );
     
      //Print( "test" );
     
   
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) {}
//+------------------------------------------------------------------+

/*
void sendBuyOrder() {
   if (OrdersTotal() > 0) return;
   double minstoplevel_SL = MarketInfo(Symbol(),MODE_STOPLEVEL)+SL_POINT*10;
   double minstoplevel_TP = MarketInfo(Symbol(),MODE_STOPLEVEL)+TP_POINT*10;
   double stoploss = NormalizeDouble(Bid-minstoplevel_SL*Point,Digits);
   double takeprofit = NormalizeDouble(Bid+minstoplevel_TP*Point,Digits);
   OrderSend(Symbol(), OP_BUY, LotSize, Ask, Slippage, stoploss, takeprofit,"Buy[" + counter +"]", MagicNumber, 0, clrGreen);
   counter++;
}

void sendSellOrder() {
   if (OrdersTotal() > 0) return;
   double minstoplevel_SL = MarketInfo(Symbol(),MODE_STOPLEVEL)+SL_POINT*10;
   double minstoplevel_TP = MarketInfo(Symbol(),MODE_STOPLEVEL)+TP_POINT*10;
   double stoploss = NormalizeDouble(Ask+minstoplevel_SL*Point,Digits);
   double takeprofit = NormalizeDouble(Ask-minstoplevel_TP*Point,Digits);
   OrderSend(Symbol(), OP_SELL, LotSize, Bid, Slippage, stoploss, takeprofit,"Sell[" + counter +"]", MagicNumber, 0, clrRed);
   counter++;
}
*/

void sendBuyOrder(double sl_price) {
   if (OrdersTotal() > 0) return;
   double minstoplevel_TP = MarketInfo(Symbol(),MODE_STOPLEVEL)+TP_POINT*10;
   double takeprofit = NormalizeDouble(Bid+minstoplevel_TP*Point,Digits);
   OrderSend(Symbol(), OP_BUY, LotSize, Ask, Slippage, sl_price, takeprofit,"Buy[" + counter +"]", MagicNumber, 0, clrGreen);
   counter++;
}

void sendSellOrder(double sl_price) {
   if (OrdersTotal() > 0) return;
   double minstoplevel_TP = MarketInfo(Symbol(),MODE_STOPLEVEL)+TP_POINT*10;
   double takeprofit = NormalizeDouble(Ask-minstoplevel_TP*Point,Digits);
   OrderSend(Symbol(), OP_SELL, LotSize, Bid, Slippage, sl_price, takeprofit,"Sell[" + counter +"]", MagicNumber, 0, clrRed);
   counter++;
}

void manuallyCloseOrder() {
   for(int i=OrdersTotal(); i>=0; i--) {
      if(OrderSelect(i, SELECT_BY_POS)==true) {
         if (OrderType() == 0) {
            OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 0, clrNONE);
         } else if (OrderType() == 1) {
            OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 0, clrNONE);
         }
      }
   }
}
-- Dodano: 01 wrz 2018, 21:11 --

Żeby otwierało tylko 1 pozycje w tej godzinie to zmień z

Kod: Zaznacz cały

if (Hour() == 18) {
na

Kod: Zaznacz cały

if (Hour() == 18 && Minute() == 0) {
Bo teraz fałszuje wyniki przez to że po uderzeniu w SL może otworzyć kolejną pozycje jeśli nie ma jeszcze 19 tylko jest nadal 18. Więc można m.in. tak to obejść dodając dodatkowy warunek który sprawdza minutę :wink:

Zlepek
Bywalec
Bywalec
Posty: 16
Rejestracja: 30 sie 2018, 09:00

Re: Poszukuję kogoś kto zrobił by dla mnie prosty automat

Nieprzeczytany post autor: Zlepek »

OK. Ostatnie moje pytanie odnośnie tego kodu i daje wam spokój.

Kod: Zaznacz cały

//+------------------------------------------------------------------+
//|                                               EATime31082018.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern int MagicNumber = 100;
extern int Slippage = 3;
extern double LotSize = 0.1;
int counter = 0;
extern int distance_between_HighLow_and_Stoploss = 0; // mozna tutaj przesunac stop loss w pipsach od jakiegos poziomu 10 = 1 pips
extern int SL_POINT = 65;
extern int TP_POINT = 97;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
      MqlTick lastTick;

      if (Hour() ==18 ) {
         // open order
         if(SymbolInfoTick(Symbol(),lastTick)) {
            //Print( lastTick.bid );
            if (lastTick.bid > iOpen(Symbol(), PERIOD_H1, 3)) {
               sendBuyOrder();
            } else {
               sendSellOrder();
            }
         }
         
      }
      if (Hour() == 23) {
         // close order
         manuallyCloseOrder();
      }
      
   
      //Print( iOpen(Symbol(), PERIOD_D1, 1) );
      //Print( iLow(Symbol(), PERIOD_D1, 1) );
      //Print( iHigh(Symbol(), PERIOD_D1, 1) );
      
   
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) {}
//+------------------------------------------------------------------+

void sendBuyOrder() {
   if (OrdersTotal() > 0) return;
   double minstoplevel_SL = MarketInfo(Symbol(),MODE_STOPLEVEL)+SL_POINT*10;
   double minstoplevel_TP = MarketInfo(Symbol(),MODE_STOPLEVEL)+TP_POINT*10;
   double stoploss = NormalizeDouble(Bid-minstoplevel_SL*Point,Digits);
   double takeprofit = NormalizeDouble(Bid+minstoplevel_TP*Point,Digits);
   OrderSend(Symbol(), OP_BUY, LotSize, Ask, Slippage, stoploss, takeprofit,"Buy[" + counter +"]", MagicNumber, 0, clrGreen);
   counter++;
}

void sendSellOrder() {
   if (OrdersTotal() > 0) return;
   double minstoplevel_SL = MarketInfo(Symbol(),MODE_STOPLEVEL)+SL_POINT*10;
   double minstoplevel_TP = MarketInfo(Symbol(),MODE_STOPLEVEL)+TP_POINT*10;
   double stoploss = NormalizeDouble(Ask+minstoplevel_SL*Point,Digits);
   double takeprofit = NormalizeDouble(Ask-minstoplevel_TP*Point,Digits);
   OrderSend(Symbol(), OP_SELL, LotSize, Bid, Slippage, stoploss, takeprofit,"Sell[" + counter +"]", MagicNumber, 0, clrRed);
   counter++;
}

void manuallyCloseOrder() {
   for(int i=OrdersTotal(); i>=0; i--) {
      if(OrderSelect(i, SELECT_BY_POS)==true) {
         if (OrderType() == 0) {
            OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 0, clrNONE);
         } else if (OrderType() == 1) {
            OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 0, clrNONE);
         }
      }
   }
}
Czy jest opcja usunąć tp. Bo nie chcę TP ale chciał bym aby sl był przesuwany. Więc już tłumaczę o co chodzi. Pozycja otwierana powiedzmy o godzinie 18:00 Przy otworzeniu pozycji sl musi być zachowany powiedzmy 30 pipsów. Następnie cena sobie śmiga w tą i we nazad. I teraz bardzo ciekawa opcja wpadła mi do czaszki. Jeśli pozycja buy zyskała powiedzmy 60 pipsów od ceny otwarcia sl zostaje przesunięty na cena otwarcia +40 pis więc jak będzie zawrotka i tak wyjdzie na + a jeśli nie to ciągnie pozycję do godzinie 23 i wtedy zamyka. Analogicznie z shortami. Jak cena zarobi 60 pipsów sl zostaje zmieniony na cena otwarcia - 40 pipsów. Czyli zamknięcie pozycji musiało by być zrobione w pętli if --> else
Czy da się w ogóle zrobić coś takiego ? jeśli tak to gdzie szukać informacji jak to napisać.

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

Re: Poszukuję kogoś kto zrobił by dla mnie prosty automat

Nieprzeczytany post autor: -rookie- »

Wrzuce takie coś ale teraz sam musisz się wysilić skoro chcesz... i jeśli będziesz blisko rozwiązania jak to zrobić wtedy wstawię gotowca.

ODPOWIEDZ