Zmienna równa wartość innej zmiennej z poprzedniej świecy

O jezykach programowania w platformach i nie tylko.
ebate
Stały bywalec
Stały bywalec
Posty: 24
Rejestracja: 18 mar 2012, 21:06

Zmienna równa wartość innej zmiennej z poprzedniej świecy

Nieprzeczytany post autor: ebate »

Witam,
Proszę o pomoc. Mam pewną zdefiniowaną zmienną. Chciałbym, aby wartość tej zmiennej po przejściu na nową świecę została przypisana innej zmiennej. W skrócie dla M5:
00:00 - Zmienna1=232, Zmienna2=0, Zmienna3=0
00:05 - Zmienna1=356, Zmienna2=232, Zmienna3=0
00:10 - Zmienna1=596, Zmienna2=356, Zmienna3=232
Wartości Zmiennej1 wpisałem przypadkowe. Jest w ogóle taka możliwość? I jak przypisać zmiennej wartość wyjściową równą 0?

-- Dodano: wt 26-07-2016, 10:28 --

Proszę o jakąś wskazówkę, cokolwiek, od czego mógłbym zacząć

ebate
Stały bywalec
Stały bywalec
Posty: 24
Rejestracja: 18 mar 2012, 21:06

Re: Zmienna równa wartość innej zmiennej z poprzedniej świec

Nieprzeczytany post autor: ebate »

Czyli co nie da się czy po prostu nie chcecie pomóc?

Awatar użytkownika
Pablo90
Pasjonat
Pasjonat
Posty: 1215
Rejestracja: 10 cze 2007, 15:36

Re: Zmienna równa wartość innej zmiennej z poprzedniej świec

Nieprzeczytany post autor: Pablo90 »

Zapisujesz czas otwarcia danej świecy i przypisujesz zmienną wtedy, kiedy obecny czas różni się od czasu zapisanego w zmiennej.

ebate
Stały bywalec
Stały bywalec
Posty: 24
Rejestracja: 18 mar 2012, 21:06

Re: Zmienna równa wartość innej zmiennej z poprzedniej świec

Nieprzeczytany post autor: ebate »

Napisałem takie cos ale nie do konca działa:

Kod: Zaznacz cały

if(iTime("EURUSD", PERIOD_M5, Current + 0)!=TimeCurrent()){
Zmienna3=Zmienna2;
Zmienna2=Zmienna1;
}
-- Dodano: czw 28-07-2016, 13:16 --

Napisałem EA, ale w dalszym ciagu nie przypisuje zmiennych. Według mnie powinien działać tak:
Przykładowo, rozpoczynam pracę EA o północy;
00:00:00 - przypisuje wartość do Zmiennej0 (zakładam, że od razu jest spełniony warunek SredniaMinimum0==Minimum1) jednocześnie sprawdza warunki do otwarcia/zamknięcia transakcji (nic się nie dzieje),
00:00:20 - przypisuje wartość Zmiennej2 do Zmiennej3,
00:00:40 - przypisuje wartość Zmiennej1 do Zmiennej2,
00:00:60 - przypisuje wartość Zmiennej0 do Zmiennej1,
00:05:00 - przypisuje nową wartość do Zmiennej0 operując na wartośiach Zmiennych1-3 przypisanych poprzednio, sprawdza warunki i ewentualnie zawiera transakcje,
00:00:20 - przypisuje aktualną wartość Zmiennej2 do zmiennej 3,
itd.

Znajduje może ktoś błąd w moim rozumowaniu lub kodzie?

Kod: Zaznacz cały

int MagicNumber = 847349;
int Current=0;
double Lots = 0.01;
//////////////////////////////////////////////////////
void init(){
}
//////////////////////////////////////////////////////
void deinit(){
}
//////////////////////////////////////////////////////
void start(){

      double Otwarcie0 = iOpen("EURUSD", PERIOD_M5, Current + 0);
      double Otwarcie1 = iOpen("EURUSD", PERIOD_M5, Current + 1);
      double Otwarcie2 = iOpen("EURUSD", PERIOD_M5, Current + 2);
      double Otwarcie3 = iOpen("EURUSD", PERIOD_M5, Current + 3);
      double Otwarcie4 = iOpen("EURUSD", PERIOD_M5, Current + 4);
      double Otwarcie5 = iOpen("EURUSD", PERIOD_M5, Current + 5);
      
      double Maksimum0 = MathMax(Otwarcie0,MathMax(Otwarcie1,Otwarcie2) 
      double Maksimum1 = MathMax(Otwarcie1,MathMax(Otwarcie2,Otwarcie3) 
      double Maksimum2 = MathMax(Otwarcie2,MathMax(Otwarcie3,Otwarcie4) 
      double Maksimum3 = MathMax(Otwarcie3,MathMax(Otwarcie4,Otwarcie5)

      double Minimum0 = MathMin(Otwarcie0,MathMin(Otwarcie1,Otwarcie2) 
      double Minimum1 = MathMin(Otwarcie1,MathMin(Otwarcie2,Otwarcie3) 
      double Minimum2 = MathMin(Otwarcie2,MathMin(Otwarcie3,Otwarcie4) 
      double Minimum3 = MathMin(Otwarcie3,MathMin(Otwarcie4,Otwarcie5)
    
      double SumaMaksimum0 = Maksimum1+Maksimum2+Maksimum3;
      
      double SumaMinimum0 = Minimum1+Minimum2+Minimum3;
      
      double SredniaMaksimum0 = SumaMaksimum0/3;
      
      double SredniaMinimum0 = SumaMinimum0/3;
        
      double Zmienna0;
      double Zmienna1;
      double Zmienna2;
      double Zmienna3;

      if(TimeCurrent()-iTime("EURUSD", PERIOD_M5, Current + 0)==20){
         Zmienna3=Zmienna2;
      }

      if(TimeCurrent()-iTime("EURUSD", PERIOD_M5, Current + 0)==40){
         Zmienna2=Zmienna1;
      }

      if(TimeCurrent()-iTime("EURUSD", PERIOD_M5, Current + 0)==60){
         Zmienna1=Zmienna0;
      }

                                                                        
      double SumaZmienna0 = Zmienna1+Zmienna2+Zmienna3;
 
      double SredniaZmienna0 = SumaZmienna0/3; 
      
   if(IsNewBar()){
   
      if(Zmienna1>0){
         if(Zmienna1==Maksimum1){
            if(SredniaZmienna0==Zmienna1){
               Zmienna0=Minimum0;
            } else {
               Zmienna0=Maksimum0;
            }
         } else {
            if(SredniaZmienna0==Zmienna1){
               Zmienna0=Maksimum0;
            } else {
               Sygnal0=Minimum0;
            }         
         }
      } else {
         if(SredniaMinimum0==Minimum1){
            Zmienna0=Maksimum0;
         } else {
            if(SredniaMaksimum0==Maksimum1){
               Zmienna=Minimum0;
            } else {
               Zmienna0=0;
            }
         }
      }                                      
      
      if(Zmienna0==Minimum0){   
         for (int i=OrdersTotal()-1; i>=0; i--){
            if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
               if (OrderType() == OP_SELL){ 
                  OrderClose(OrderTicket(),OrderLots(),Ask,0,Green);
               }
            }
         }
      }            
      if(Zmienna0==Maksimum0){   
         for (i=OrdersTotal()-1; i>=0; i--){
            if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
               if (OrderType() == OP_BUY){ 
                  OrderClose(OrderTicket(),OrderLots(),Bid,0,Green);
               }
            }
         }
      }   
      if(Zmienna0==Minimum0){         
         OrderSend(Symbol(),OP_BUY,Lots,Ask,0,0,0,NULL,MagicNumber,0,Green);
      }
      if(Zmienna0==Maksimum0){         
         OrderSend(Symbol(),OP_SELL,Lots,Bid,0,0,0,NULL,MagicNumber,0,Red);
      }
   }
}
//////////////////////////////////////////////////////
bool IsNewBar(){
   static int prevTime;
   bool newBar=false;
   if(Time[0]!=prevTime){
      newBar=true;
      prevTime=Time[0];
   }
   return(newBar);
}
//////////////////////////////////////////////////////

ODPOWIEDZ