Wszystkie pytania dozwolone początkujących programistów

O jezykach programowania w platformach i nie tylko.
Dajman
Bywalec
Bywalec
Posty: 5
Rejestracja: 30 gru 2011, 21:58

Pytanie odnośnie poprawności fragmentu kodu

Nieprzeczytany post autor: Dajman »

Witam,
Znalazłem w internecie przykład EA i wyciąłem część kodu odpowiadającą za kalkulacje wszystkich otwartych transakcji. Dzięki temu fragmentowi chyba EA może obliczać średnią wartość wszystkich otwartych pozycji danego typu i kalkulować TP/SL odpowiednio dla wszystkich pozycji danego typu.

Mam problem z void TrailingAlls
zaraz poniżej wyskakuje błąd jak "komplikuję" w meta editor:
'{' - comma or semicolon expected
Głowiłem się od paru godzin ale chyba trzeba tylko nawet dopisać jeden symbol dlatego myślę że to zajmie chwilkę :-) Na pewno wystawię pochwałę gdyż siedziałem do późna w nocy i nic nie wykombinowałem ;-)

Kod: Zaznacz cały

 #property copyright "Fragment kodu z neta"

extern double Lots = 0.1;

extern double TakeProfit = 10;
extern double Stoploss = 500;
extern double TrailStart = 10;
extern double TrailStop = 10;
extern double PipStep = 30;
extern int MaxTrades = 10;
bool UseEquityStop = false;
extern bool UseTrailingStop = false;
int MagicNumber = 12324;
double PriceTarget, StartEquity, BuyTarget, SellTarget;
double AveragePrice, SellLimit, BuyLimit;
double LastBuyPrice, LastSellPrice, ClosePrice, Spread;
int flag;
datetime timeprev=0, expiration;
int NumOfTrades=0;
double iLots;
int cnt=0, total;
double Stopper=0;  
int ticket;
bool NewOrdersPlaced = false;

int init()
{
 Spread = MarketInfo(Symbol(), MODE_SPREAD)*Point;
 return(0);
}

int deinit()
{
 return(0);
}

int start()
{

 if (UseTrailingStop)   TrailingAlls(TrailStart, TrailStop, AveragePrice); 
 
//----------------------- CALCULATE AVERAGE OPENING PRICE
   total=CountTrades();
   AveragePrice=0;
   double Count = 0;
   for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
   {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)
     continue;
    if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
     if(OrderType()==OP_BUY || OrderType()==OP_SELL)  
      {
       AveragePrice=AveragePrice+OrderOpenPrice()*OrderLots();
       Count = Count + OrderLots();
      }
   }
   if(total > 0)
    AveragePrice=NormalizeDouble(AveragePrice/Count, Digits);

   
//----------------------- RECALCULATE STOPLOSS & PROFIT TARGET BASED ON AVERAGE OPENING PRICE
   if(NewOrdersPlaced)
   for(cnt=OrdersTotal()-1;cnt>=0;cnt--)
   {
    OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
    if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)
     continue;
    if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
     if(OrderType()==OP_BUY) // Calculate profit/stop target for long 
     {
      PriceTarget=AveragePrice+(TakeProfit*Point);
      BuyTarget = PriceTarget;
      Stopper=AveragePrice-(Stoploss*Point); 
//      Stopper=0; 
      flag = 1;
     }
    if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
     if(OrderType()==OP_SELL) // Calculate profit/stop target for short
     {
      PriceTarget=AveragePrice-(TakeProfit*Point);
      SellTarget = PriceTarget;
      Stopper=AveragePrice+(Stoploss*Point);  

      flag = 1; 
     }
   }


void TrailingAlls 
{              // TUTAj wyskakuje błąd czyli " '{' - comma or semicolon expected
int starty; // zmieniłem z start
int stopy;  // zmieniłem z stop
double AvgPrice;
 int profit;
 double stoptrade;
 double stopcal;
 
 if(stopy==0)
  return;
 
 int trade;
 for(trade=OrdersTotal()-1;trade>=0;trade--)
 {
  if(!OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))
   continue;

  if(OrderSymbol()!=Symbol()||OrderMagicNumber()!=MagicNumber)
   continue;

  if(OrderSymbol()==Symbol()||OrderMagicNumber()==MagicNumber)
  {
   if(OrderType()==OP_BUY)
   {
    profit=NormalizeDouble((Bid-AvgPrice)/Point,0);
    if(profit<starty)
     continue;
    stoptrade=OrderStopLoss();
    stopcal=Bid-(stopy*Point);
    if(stoptrade==0||(stoptrade!=0&&stopcal>stoptrade))
//     OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,Blue);
     OrderModify(OrderTicket(),AvgPrice,stopcal,OrderTakeProfit(),0,Aqua);
   }//Long
  
   if(OrderType()==OP_SELL)
   {
    profit=NormalizeDouble((AvgPrice-Ask)/Point,0);
    if(profit<starty)
     continue;
    stoptrade=OrderStopLoss();
    stopcal=Ask+(stopy*Point);
    if(stoptrade==0||(stoptrade!=0&&stopcal<stoptrade))
//     OrderModify(OrderTicket(),OrderOpenPrice(),stopcal,OrderTakeProfit(),0,Red);
     OrderModify(OrderTicket(),AvgPrice,stopcal,OrderTakeProfit(),0,Red);
   }//Shrt
  }
  Sleep(1000);
 }//for
} 

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Nieprzeczytany post autor: Pierz Andrzej »

Kod: Zaznacz cały

void TrailingAlls ()
{................
pozdrawiam
Andrzej Pierz

Dodano po 4 minutach:

a nie sorki ;)
teraz dopiero zobaczylem ze przekazujesz do funkcji zmienne :)

Kod: Zaznacz cały

int start()
{

 if (UseTrailingStop)   TrailingAlls(TrailStart, TrailStop, AveragePrice); 
......................
wiec funkcja tez musi miec te zmienne ;)

Kod: Zaznacz cały

void TrailingAlls (double start,double stop, double avgprice)
{................
zobacz w oryginale jekie sa nazwy bo ni przegladalem dokladnie calego kodu ;)

pozdrawiam Andrzej Pierz
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Dajman
Bywalec
Bywalec
Posty: 5
Rejestracja: 30 gru 2011, 21:58

Nieprzeczytany post autor: Dajman »

Dziękuję za odpowiedź, jednakże jak wykonałem wg tego co Pan napisał,

Kod: Zaznacz cały

void TrailingAlls (double start,double stop, double avgprice)  //dopisałem wg Pana odpowiedzi
{             
int start; 
int stop;  
double AvgPrice;
 int profit;
 double stoptrade;
 double stopcal;
 
 if(stop==0)
  return;
 
 int trade;
 for(trade=OrdersTotal()-1;trade>=0;trade--)
 {
  if(!OrderSelect(trade,SELECT_BY_POS,MODE_TRADES))
   continue;
Więc piszę mi błąd teraz:
'(' - function definition unexpected
'start' - variable not defined

Niemniej jednak jak zdefiniuje jako globalnie z double lub int start to pisze mi tylko '(' - function definition unexpected

hehe chyba znowu jedna mała rzecz jest źle :-)

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

Dajman pisze:Więc piszę mi błąd teraz:
'(' - function definition unexpected
'start' - variable not defined

Niemniej jednak jak zdefiniuje jako globalnie z double lub int start to pisze mi tylko '(' - function definition unexpected

hehe chyba znowu jedna mała rzecz jest źle Smile
nie znajduje funkcji start -> zapewne problem z zamykającymi klamrami (zło ilość) => "}"
to pomocny jest notepad++
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Dajman
Bywalec
Bywalec
Posty: 5
Rejestracja: 30 gru 2011, 21:58

Nieprzeczytany post autor: Dajman »

Możliwe lecz tam pisze mi nie ' { ' , ale ( , i chyba w tym miejscu jest błąd,
wskazuje mi:

Kod: Zaznacz cały

void TrailingAlls //**TUTAJ **// (double start,double stop, double avgprice) 
Czyli bardziej na ( . Mogę się mylić. :-)

Awatar użytkownika
Tig3r
Przyjaciel Forum
Przyjaciel Forum
Posty: 2310
Rejestracja: 02 sty 2008, 10:46

Nieprzeczytany post autor: Tig3r »

Możliwe lecz tam pisze mi nie ' { ' , ale ( , i chyba w tym miejscu jest błąd,
wskazuje mi:

Kod:

void TrailingAlls //**TUTAJ **// (double start,double stop, double avgprice)


Czyli bardziej na ( . Mogę się mylić. Smile
Jeśli Ci wskazuje w danym miejscu to znak że problem może być tam lub wcześniej - sprawdź czy zamykasz dobrze funkcje Start czy nie brak klamry

jak pisałem notepad++ się w tym dobrze sprawdza bo od razu podświetla wizualnie klamry (wybierasz tylko język Obcject-C)
======================================================
Nie głupi ten co nie wie, lecz ten który nie chce się nauczyć..

Dajman
Bywalec
Bywalec
Posty: 5
Rejestracja: 30 gru 2011, 21:58

Nieprzeczytany post autor: Dajman »

Dziękuję za podpowiedzi, poszukam za pomocą tego programu notepad++ co jest nie tak :-)

Awatar użytkownika
Pierz Andrzej
Przyjaciel Forum
Przyjaciel Forum
Posty: 1200
Rejestracja: 02 lip 2006, 14:17

Nieprzeczytany post autor: Pierz Andrzej »

raczej stawial by na to ze ma Pan dwa razy zdefinjowana zmienna ;)

Kod: Zaznacz cały

void TrailingAlls (double start,double stop, double avgprice)  //dopisałem wg Pana odpowiedzi
{             
int start;
int stop;  
start i stop jest dwa razy zdefiniowana raz jako double drugi raz jako int ;)

pozdrawiam
Andrzej Pierz
z poważaniem
Andrzej Pierz
FOREX-SERVICE

Awatar użytkownika
siersciuch
Pasjonat
Pasjonat
Posty: 407
Rejestracja: 06 kwie 2010, 20:31

Nieprzeczytany post autor: siersciuch »

Potrzeba mi pomsył na najwieksza wartość ceny na np 10 świec w tył.
Wpadło mi do głowy przypisać 10 świec w tył do tablicy, później porównać te wszystkie wartośći i wybrać najwiekszą. Macie moze jakieś lepsze/szybsze pomysły, zebym niemusiał pisać kodiu ksiazki?
jeżeli będziesz uparty, prawdopodobnie częściej odniesiesz sukces, niż doznasz porażki.

Awatar użytkownika
personov
Pasjonat
Pasjonat
Posty: 1525
Rejestracja: 09 sie 2009, 21:27

Nieprzeczytany post autor: personov »

Kod: Zaznacz cały

double szczyt = iHigh(NULL, 0, iHighest(NULL, 0, MODE_HIGH, 10, 0)); 
double dolek = iLow(NULL, 0, iLowest(NULL, 0, MODE_LOW, 10, 0)); 
10 to liczba świec do tyłu.
Solą życia jest kasa.

ODPOWIEDZ