Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

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

Nieprzeczytany post autor: personov »

Forma blokady pomogła. Dzięki Andrzej.
Solą życia jest kasa.

Awatar użytkownika
micjat
Stały bywalec
Stały bywalec
Posty: 62
Rejestracja: 29 sty 2012, 20:58

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

Nieprzeczytany post autor: micjat »

Witam,
dopiero zaczynam tworzyć swoje EA więc na początek coś prostego żebym zrozumiał formułę działania itd

Mam z tym taki problem:
1) chcę żeby EA na M30 !!! działało od godziny 9:30 tj. żeby sprawdzało jak średnie MA są ułożone na zamknięciu świeczki z godziny 9:00 i otwierało pozycję na otwarciu nowej świeczki o 9:30.
2) Proszę o sprawdzenie czy dobrze to wszystko posklejałem
MA 5
MA 5 shift-2
Otwarcie: Długa pozycja MA5 < MA5s-2, Krótka pozycja MA5> MA5s-2
SL ustawiany przy otwarciu pozycji 10 pipsowy

Zamykanie pozycji:
TS 10 pipsów

Kod:
//+------------------------------------------------------------------+
//| This MQL is generated by Expert Advisor Builder |
//| http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/ |
//| |
//| In no event will author be liable for any damages whatsoever. |
//| Use at your own risk. |
//| |
//+------------------- DO NOT REMOVE THIS HEADER --------------------+

#define SIGNAL_NONE 0
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4

#property copyright "Expert Advisor Builder"
#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = False;
extern double Lots = 0.1;
extern int Slippage = 0;
extern bool UseStopLoss = True;
extern int StopLoss = 10;
extern bool UseTakeProfit = False;
extern int TakeProfit = 60;
extern bool UseTrailingStop = True;
extern int TrailingStop = 10;

int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;

if (EachTickMode) Current = 0; else Current = 1;

return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;



if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;

//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+


double Buy1_1 = iMA(NULL, PERIOD_M30, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Buy1_2 = iMA(NULL, PERIOD_M30, 5, -2, MODE_SMA, PRICE_CLOSE, Current + 0);

double Sell1_1 = iMA(NULL, PERIOD_M30, 5, 0, MODE_SMA, PRICE_CLOSE, Current + 0);
double Sell1_2 = iMA(NULL, PERIOD_M30, 5, -2, MODE_SMA, PRICE_CLOSE, Current + 0);




//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+

//Check position
bool IsTrade = False;

for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close

//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+



//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close

//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+



//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}

//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+

if (Buy1_1 < Buy1_2) Order = SIGNAL_BUY;

if (Sell1_1 > Sell1_2) Order = SIGNAL_SELL;


//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+

//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}

//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}

if (!EachTickMode) BarCount = Bars;

return(0);
}
//+------------------------------------------------------------------+
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Don't tell me the sky is the limit when there are footprints on the moon!

Ahmed
Gaduła
Gaduła
Posty: 227
Rejestracja: 06 kwie 2009, 00:50

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

Nieprzeczytany post autor: Ahmed »

WItam,
Robię backtesty swojego ea i po testach mam w raporcie błędy na wykresie(jakaś tam liczba) czy ta wartość błędów na wykresie wpływa na to czy backtest jest wiarygodny? Będę też wdzięczny za pomoc jak te błędy na wykresie usunąć.

Pozdrawiam
Cenka opada

kmicic
Bywalec
Bywalec
Posty: 9
Rejestracja: 07 mar 2012, 23:05

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

Nieprzeczytany post autor: kmicic »

Błędy wynikają zapewne z zawartości katalogu history, przerwy w połączeniach itp.
Moja metoda na to to zamknąć metatradera. Usunąć wszystko z katalogu history (dla bezpieczeństwa można stary katalog zachować), otwieram metatradera i on ściąga poprawne wyniki.

Zawsze się to udaje. Większą ilość wyników można ściągnąć posługując się przesuwaniem wykresu na początek klawiszami pgup-dn ? (nie pamiętam który działa wstecz) i obserwując ilość pobranych bajtów. W pewnym momencie metoda pobierania większej ilości wyników przestaje działać. Ale ściąga np na M1 ponad 2 miesiące i mnie to wystarcza. Zapewne to wynika z ograniczenie ilości barów na wykresie ustawionych w opcjach. Przed operacją mozna ustawić ilość barów wymaganych na większą wartość.
pozdr
AK

Awatar użytkownika
micjat
Stały bywalec
Stały bywalec
Posty: 62
Rejestracja: 29 sty 2012, 20:58

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

Nieprzeczytany post autor: micjat »

Jeśli przy błędzie wyskakuje cyfra 130 to jest to błąd związany z za małym TP i SL. W moim ea trzeba zmienić sl i tp z wartości 10 na wartość 100.
I jak Ci testy idą tego ea?
Don't tell me the sky is the limit when there are footprints on the moon!

Ahmed
Gaduła
Gaduła
Posty: 227
Rejestracja: 06 kwie 2009, 00:50

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

Nieprzeczytany post autor: Ahmed »

micjat pisze:Jeśli przy błędzie wyskakuje cyfra 130 to jest to błąd związany z za małym TP i SL. W moim ea trzeba zmienić sl i tp z wartości 10 na wartość 100.
I jak Ci testy idą tego ea?
Jeśli to pytanie do mnie, to testy idą średnio. Tzn. na demo i realu jest ok, ale backtesty w zależności od danych i widzimisie mt4 mam za każdym razem inne.
Cenka opada

Awatar użytkownika
potrzebujący ;)
Bywalec
Bywalec
Posty: 17
Rejestracja: 29 kwie 2012, 23:02

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

Nieprzeczytany post autor: potrzebujący ;) »

Witam,

mam prośbę. Napisałem (a raczej posklejałem z różnych podpowiedzi) EA, ale niestety nie działa... :oops:
Czy może mi ktoś powiedzieć co jest źle i jak to poprawić?
Ogólnie chodzi o to, żeby system kupował gdy cena przetnie EMA od dołu + RSI przetnie linie 50 od dołu. Sprzedaż odwrotnie, gdy RSI przetnie linie 50 od góry + cena przetnie EMA od góry.

błagam, pomóżcie, bo nie jestem programistą... :cry: :cry:

Kod: Zaznacz cały

#define magic1  276532
//--- input parameters
extern double    lot=0.01;
extern double    tp=2000;
extern double    sl=200;
extern double    ts=200;
//==================================================================
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic1)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//---- return orders volume ----------------------------------------
   if(buys>0) return(buys);
   else       return(-sells);
  }
//------------------------------------------------------------------
// sygnał
//------------------------------------------------------------------
void CheckForOpen()
{
// zmienne ---------------------------------------------------------
int m;
double rsiobecne=iRSI(NULL,0,14,PRICE_CLOSE,0);
double rsistare=iRSI(NULL,0,14,PRICE_CLOSE,1);
double emaobecne=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,0);
double emastare=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,1);
double cenabid=MarketInfo(Symbol(),MODE_BID);
double cenaask=MarketInfo(Symbol(),MODE_ASK);
// warunki kupna ---------------------------------------------------
if(rsistare<50 && rsiobecne>50 && emastare>cenabid && emaobecne<cenabid)
   {m=OrderSend(Symbol(),OP_BUY,lot,Ask+(70*Point),10*Point,sl*Point,tp*Point,NULL,magic1,0,Green);
   return;
   }
// warunki sprzedaży -----------------------------------------------
if(rsistare>50 && rsiobecne<50 && emastare<cenaask && emaobecne>cenaask)
   {m=OrderSend(Symbol(),OP_SELL,lot,Bid-(70*Point),10*Point,sl*Point,tp*Point,NULL,magic1,0,Orange);
   return;
   }
}
//------------------------------------------------------------------

void CheckForClose()
{
// zmienne ---------------------------------------------------------
int m;
double rsiobecne=iRSI(NULL,0,14,PRICE_CLOSE,0);
double rsistare=iRSI(NULL,0,14,PRICE_CLOSE,1);
double emaobecne=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,0);
double emastare=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,1);
double cenabid=MarketInfo(Symbol(),MODE_BID);
double cenaask=MarketInfo(Symbol(),MODE_ASK);
// warunki zamknięcia ----------------------------------------------

for(int i=0;i<OrdersTotal();i++)
  {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
   if(OrderMagicNumber()!=magic1 || OrderSymbol()!=Symbol()) continue;
//---- zamknięcie kupna --------------------------------------------
   if(OrderType()==OP_BUY)
     {
      if(rsistare>50 && rsiobecne<50 && emastare<cenaask && emaobecne>cenaask)
      {
      OrderClose(OrderTicket(),OrderLots(),Bid,10*Point,White);
      break;
      }
     }
//---- zamknięcie sprzedaży ----------------------------------------
   if(OrderType()==OP_SELL)
     {
      if(rsistare<50 && rsiobecne>50 && emastare>cenabid && emaobecne<cenabid)
      {
      OrderClose(OrderTicket(),OrderLots(),Ask,10*Point,White);
      break;
      }
     }
  }
}
//------------------------------------------------------------------

void CheckForTrailing()
{

// warunki ---------------------------------------------------------
for(int i=0;i<OrdersTotal();i++)
   {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
   if(OrderMagicNumber()!=magic1 || OrderSymbol()!=Symbol()) continue;
// trailing stop dla kupna -----------------------------------------
   if(OrderType()==OP_BUY)
      {
      if(Bid-OrderOpenPrice()>ts*Point)
         {
         if(OrderStopLoss()<Bid-ts*Point)
            {
            OrderModify(OrderTicket(),OrderOpenPrice(),Bid-ts*Point,OrderTakeProfit(),0,Blue);
            break;
            }
         }
      }
// trailing stop dla sprzedaży -------------------------------------
   if(OrderType()==OP_SELL)
      {
      if(OrderOpenPrice()-Ask>ts*Point)
         {
         if(OrderStopLoss()>Ask+ts*Point)
            {
            OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ts*Point,OrderTakeProfit(),0,Blue);
            break;
            }
         }
      }      
   }      
   

return;
}
 
//---- start -------------------------------------------------------
void start()
{
//---- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false) return;

//---- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   else 
   {
   CheckForTrailing();
   CheckForClose();
   }
return;
}
5% z czegoś jest lepsze niż 100% z niczego :P

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

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

Nieprzeczytany post autor: JAREK67 »

Ja też nie jestem, ale kilka poprawek naniosłem. Co do warunków otwarcia i zamknięcia też wprowadziłem zmianę. Ogólnie teraz działa. Możesz zacząć zabawę :wink:

Kod: Zaznacz cały

#define magic1  276532
//--- input parameters
extern double    lot=0.1;
extern double    tp=2000;
extern double    sl=200;
extern double    ts=200;
//==================================================================
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic1)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//---- return orders volume ----------------------------------------
   if(buys>0) return(buys);
   else       return(-sells);
  }
//------------------------------------------------------------------
// sygnał
//------------------------------------------------------------------
void CheckForOpen()
{
// zmienne ---------------------------------------------------------
int m;
double rsiobecne=iRSI(NULL,0,14,PRICE_CLOSE,0);
double rsistare=iRSI(NULL,0,14,PRICE_CLOSE,1);
double emaobecne=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,0);
double emastare=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,1);
double cenabid=MarketInfo(Symbol(),MODE_BID);
double cenaask=MarketInfo(Symbol(),MODE_ASK);
// warunki kupna ---------------------------------------------------
if(rsistare<50 && rsiobecne>50 && Open[0]<emaobecne && Close[0]>emaobecne/*&& emastare> && emaobecne<cenabid*/)
   {m=OrderSend(Symbol(),OP_BUY,lot,Ask/*+(70*Point)*/,10*Point,Ask-sl*Point,Ask+tp*Point,NULL,magic1,0,Green);
   return;
   }
// warunki sprzedaży -----------------------------------------------
if(rsistare>50 && rsiobecne<50 && Open[0]>emaobecne && Close[0]<emaobecne/*&& emastare<cenaask && emaobecne>cenaask*/)
   {m=OrderSend(Symbol(),OP_SELL,lot,Bid/*-(70*Point)*/,10*Point,Bid+ sl*Point,Bid-tp*Point,NULL,magic1,0,Orange);
   return;
   }
}
//------------------------------------------------------------------

void CheckForClose()
{
// zmienne ---------------------------------------------------------
int m;
double rsiobecne=iRSI(NULL,0,14,PRICE_CLOSE,0);
double rsistare=iRSI(NULL,0,14,PRICE_CLOSE,1);
double emaobecne=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,0);
double emastare=iMA(NULL,0,12,0,MODE_EMA,PRICE_CLOSE,1);
double cenabid=MarketInfo(Symbol(),MODE_BID);
double cenaask=MarketInfo(Symbol(),MODE_ASK);
// warunki zamknięcia ----------------------------------------------

for(int i=0;i<OrdersTotal();i++)
  {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
   if(OrderMagicNumber()!=magic1 || OrderSymbol()!=Symbol()) continue;
//---- zamknięcie kupna --------------------------------------------
   if(OrderType()==OP_BUY)
     {
      if(rsistare>50 && rsiobecne<50 && Open[0]>emaobecne && Close[0]<emaobecne/*&& emastare<cenaask && emaobecne>cenaask*/)
      {
      OrderClose(OrderTicket(),lot,Bid,10*Point,White);
      break;
      }
     }
//---- zamknięcie sprzedaży ----------------------------------------
   if(OrderType()==OP_SELL)
     {
      if(rsistare<50 && rsiobecne>50 && Open[0]<emaobecne && Close[0]>emaobecne/*&& emastare>cenabid && emaobecne<cenabid*/)
      {
      OrderClose(OrderTicket(),lot,Ask,10*Point,White);
      break;
      }
     }
  }
}
//------------------------------------------------------------------

void CheckForTrailing()
{

// warunki ---------------------------------------------------------
for(int i=0;i<OrdersTotal();i++)
   {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
   if(OrderMagicNumber()!=magic1 || OrderSymbol()!=Symbol()) continue;
// trailing stop dla kupna -----------------------------------------
   if(OrderType()==OP_BUY)
      {
      if(Bid-OrderOpenPrice()>ts*Point)
         {
         if(OrderStopLoss()<Bid-ts*Point|| OrderStopLoss() == 0)
            {
            OrderModify(OrderTicket(),OrderOpenPrice(),Bid-ts*Point,OrderTakeProfit(),0,Blue);
            break;
            }
         }
      }
// trailing stop dla sprzedaży -------------------------------------
   if(OrderType()==OP_SELL)
      {
      if(OrderOpenPrice()-Ask>ts*Point)
         {
         if(OrderStopLoss()>Ask+ts*Point|| OrderStopLoss() == 0)
            {
            OrderModify(OrderTicket(),OrderOpenPrice(),Ask+ts*Point,OrderTakeProfit(),0,Blue);
            break;
            }
         }
      }      
   }      
   

return;
}
 
//---- start -------------------------------------------------------
void start()
{
//---- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false) return;

//---- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   else 
   {
   CheckForTrailing();
   CheckForClose();
   }
return;
}

Tsubasa
Bywalec
Bywalec
Posty: 10
Rejestracja: 26 gru 2011, 11:52

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

Nieprzeczytany post autor: Tsubasa »

Witam,

double a1,a2,a3,otwarta;
double otwarta();
a1= Open[i+1];
a2= Open[i+2];
a3= Open[i+3];

Otwarta=MathMax(a1,MathMax(a2,a3) <= zmienną "otwarta" akceptuje
Otwarta(i)=MathMax(a1,MathMax(a2,a3) <= zmienną "otwarta(i)" nie akceptuje, dlaczego??

Potrzebuje porównywać na bieżąco aktualną wartość zmiennej z poprzednią wartością zmiennej... otwarta(i+1) z otwartą (i+2) <= jest taka możliwość w mt4??

-- Dodano: sob 29-12-2012, 22:00 --

Rozwiązanie:
double otwarta2;
a4=Open[i+4];

Otwarta2=MathMax(a2,MathMax(a3,a4) <= i mamy poprzednią wartość Otwartej, która "znikła", gdy pojawiła sie nowa świeca.
Tyle główkowania, kombinowania, a rozwiązania tak banalne, że widzę, że nie potrzebnie pytałem:)


Chociaż nadal ciekawi mnie czy jest możliwość utworzenia zmiennej "otwarta(i)".
Pozdrawiam

Fx_boy
Pasjonat
Pasjonat
Posty: 693
Rejestracja: 30 maja 2011, 08:31

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

Nieprzeczytany post autor: Fx_boy »

Czy zapis jn. oznacza, że EA można stosować tylko na platformie ECN ?
(!EcnBroker) OrderSend(s_symbol,OP_BUY,LotsOptimized(),NormalizeDouble(Ask,digit),Slippage*_Point,NormalizeDouble(BStopLossLevel,digit), NormalizeDouble(BTakeProfitLevel,digit),"Buy(#" + MagicNumber + ")",MagicNumber,0,DodgerBlue); else
Jeżeli brzmi chaotycznie z góry sorry.
Dziękuję i pozdrawiam.

ODPOWIEDZ