Biraz yardım gerekli - sayfa 2

 
WHRoeder :
Onay değerini tek başına kullanmayın https://www.mql5.com/en/forum/133792/page3#512466

Anlatmak istediğini anlayamadım,

pipValue = ( MarketInfo ( Symbol (), MODE_TICKVALUE ))* 10 ;

Ben bile paylaştığın linkten amacını anlamadım. benim kodumda,

 if ( Digits == 5 || Digits == 3 )
   {            
      pips2dbl = Point * 10 ; pips2point = 10 ; pipValue = ( MarketInfo ( Symbol (), MODE_TICKVALUE ))* 10 ;
   } 
   else 
   {    
      pips2dbl = Point ;   pips2point = 1 ; pipValue = ( MarketInfo ( Symbol (), MODE_TICKVALUE ))* 1 ;
   }
   
   Slippage = pips2dbl*MaxSlippage;
   TP = pips2dbl*Limit_TP;
   SL = pips2dbl*Limit_SL;

Lütfen değiştirir misiniz? Böylece daha iyi anlayabildim.

@RaptorUK Bu sefer...

 int i,j,k;

and

int i = 0 , j, k;

Her ikisi de çalıştı, hata yok. Yabancı. Ama yine de değiştirdim.

 
https://docs.mql4.com/indicators/iama'yı şimdi nerede bulabilirim???
 
qgmql :
https://docs.mql4.com/indicators/iama'yı şimdi nerede bulabilirim???

Bozuk, servis masasına bilet gönderdim. . . bu arada . . .

iMA

Hareketli Ortalama göstergesini hesaplar ve değerini döndürür.

çift iMA (
sicim sembol , // sembol
int zaman aralığı , // zaman aralığı
int ma_period , // MA ortalama dönemi
int ma_shift , // MA kaydırma
int ma_method , // ortalama alma yöntemi
int uygulanan_fiyat , // uygulanan fiyat
int vardiya // vardiya
);

parametreler

sembol

[içinde] Göstergenin hesaplanacağı verilerdeki sembol adı. NULL , geçerli sembol anlamına gelir.

zaman aralığı

[içinde] Zaman Çerçevesi. ENUM_TIMEFRAMES numaralandırma değerlerinden herhangi biri olabilir. 0, mevcut grafik zaman çerçevesi anlamına gelir.

ana_dönem

[içinde] Hesaplama için ortalama alma süresi.

ma_shift

[içinde] MA vardiyası. Göstergeler çizgi ofseti, zaman çerçevesine göre çizelgeyle ilgilidir.

ma_yöntemi

[içinde] Hareketli Ortalama yöntemi. ENUM_MA_METHOD numaralandırma değerlerinden herhangi biri olabilir.

uygulanan_fiyat

[içinde] Uygulanan fiyat. ENUM_APPLIED_PRICE numaralandırma değerlerinden herhangi biri olabilir.

vardiya

[içinde] Gösterge arabelleğinden alınan değerin dizini (geçerli çubuğa göre belirli dönemler önce kaydırma).

döndürülen değer

Hareketli Ortalama göstergesinin sayısal değeri.

Misal:

AlligatorJawsBuffer[i]= iMA ( NULL ,0,13,8, MODE_SMMA , PRICE_MEDIAN ,i);

 
RaptorUK :

Bozuk, servis masasına bilet gönderdim. . . bu arada . . .

Destek Ekibi 2014.02.18 08:09
Sabit. Teşekkür ederim.


iMA()
 

Uzmanın işlevi başlatması için ne kullanmalıyım?

 void ontick() {
}
return ;

//OR...

int start() {
}
return (o);

veya her ikisini de yeni meta düzenleyicide kullanabilir miyim?

(Sanırım çok basit bir şey soruyorum ama aslında sıfır bilgim var ve onu öğrenmekle ilgileniyorum.)

 
qgmql :

Uzmanın işlevi başlatması için ne kullanmalıyım?

veya her ikisini de yeni meta düzenleyicide kullanabilir miyim?

(Sanırım çok basit bir şey soruyorum ama aslında sıfır bilgim var ve onu öğrenmekle ilgileniyorum.)

İkisinden birini kullanabilirsiniz. . . ancak gelecekteki uyumluluk için OnTick() kullanın
 

EA'm için "LotsProgression" özelliğinin kodunu almak için çok çalıştım ama kafa karıştırıcı. Arkadaşlar lütfen aşağıdaki kaynakta bolca ilerleme için yazılmış kodun altını çizer misiniz? (ve lütfen burada olduğu gibi kaynağın bir bölümünü nasıl vurgulayacağınızı da söyleyin.

 extern int expertId = 183547 ;
extern int TakeProfit= 40 ;
extern int StopLoss= 10 ;
extern int BreakevenStop = 30 ;

extern bool TimeEntry= true ;
extern string StartTime= "7:00" ;
extern string StopTime= "17:00" ;
extern bool PriceEntry= false ;
extern double Price= 1.5500 ;
extern bool FirstLong= false ;
extern string LotsProgression= "0.1;0.1;0.2;0.3;0.4;0.6;0.8;1.1;1.5;2.0;2.7;3.6;4.7;6.2;8.0;10.2;13.0;16.5;20.8;26.3;33.1;41.6;52.2;65.5;82.5;103.9;130.9;165;207.9;262;330.1;416;524.7;661.1" ;
extern bool RestartNewCycle = true ;

extern int     slippage= 3 ;       //slippage for market order processing
extern int     OrderTriesNumber= 10 ; //to repeat sending orders when you receive an error or requote

extern string     EAName= "PowerSM" ; 

bool buysig,sellsig,cycleended;
int tries, long , short ,co,plen,lord,mord,lpos;
double Lot,lots[],tlot,lop,lcp,lsl,ltp;

double lbid = - 1 ;

int counter = 0 ;

int init() 
{
   int i,j,k;
   string ls;
   while ( true ) {
        j= StringFind (LotsProgression, ";" ,i);
         if (j> 0 ) {
                ls= StringSubstr (LotsProgression,i,j-i);
                i=j+ 1 ;
                k++;
                 ArrayResize (lots,k);
                lots[k- 1 ]= StrToDouble (ls);
        } else {
                ls= StringSubstr (LotsProgression,i);
                k++;
                 ArrayResize (lots,k);
                lots[k- 1 ]= StrToDouble (ls);
                 break ;
        }
   }

   plen= ArraySize (lots);
}

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

   co=CalculateCurrentOrders();
   if (co > 0 ) counter = 1 ;
      
   CheckForSignals();
   CheckForOpen();  
   DoBreakEven(BreakevenStop, 0 );
   
   lbid = Bid ;
}


int CalculateCurrentOrders() {
   int ord; string c;
//----
   for ( int i= 0 ;i< OrdersTotal ();i++) {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )== false ) break ;
       if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==expertId) {
         ord++;
         if ( OrderType ()== OP_BUY ) {
            mord= 1 ;
             if ( OrderClosePrice ()- OrderOpenPrice ()>BreakevenStop* Point ) tlot= MathAbs (tlot); else tlot=- MathAbs (tlot);
         }
         if ( OrderType ()== OP_SELL ) {
            mord=- 1 ;
             if (- OrderClosePrice ()+ OrderOpenPrice ()>BreakevenStop* Point ) tlot= MathAbs (tlot); else tlot=- MathAbs (tlot);
         }
         c= StringSubstr ( OrderComment (), 0 , StringFind ( OrderComment (), "_" , 0 ));
         lpos= StrToInteger (c);
         return (ord);
      }
   }
//---- return orders volume
   return (ord);
}

double GetLastTrade() 
{
   int ord; lord= 0 ;
   string c;
//----
   for ( int i= OrdersHistoryTotal ()- 1 ;i>= 0 ;i--) 
   {
       if (! OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) continue ;
       if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==expertId) 
      {
         if ( OrderType ()== OP_BUY ) lord= 1 ;
         if ( OrderType ()== OP_SELL ) lord=- 1 ;
         c= StringSubstr ( OrderComment (), 0 , StringFind ( OrderComment (), "_" , 0 ));
         lpos= StrToInteger (c);
         
         lop = NormalizeDouble ( OrderOpenPrice (), Digits );
         lcp = NormalizeDouble ( OrderClosePrice (), Digits );
         lsl = NormalizeDouble ( OrderStopLoss (), Digits );
         ltp = NormalizeDouble ( OrderTakeProfit (), Digits );
         
         if ( OrderProfit ()> 0 ) 
           return ( OrderLots ()); 
         else 
           return (- OrderLots ());
      }
   }
   return ( 0 );
}

bool IsEntryTime()
{
   datetime tm0 = TimeCurrent ();
   datetime tm1 = StrToTime ( TimeToStr (tm0, TIME_DATE ) + " " + StartTime);
   datetime tm2 = StrToTime ( TimeToStr (tm0, TIME_DATE ) + " " + StopTime);

   bool isTm = false ; 
   if (tm1 <= tm2) 
    isTm = isTm || (tm1 <= tm0 && tm0 < tm2);
   else
    isTm = isTm || (tm1 <= tm0 || tm0 < tm2);
  
   return (isTm);
}

void CheckForSignals() 
{
  buysig = false ;
  sellsig = false ;
      
         if (co > 0 ) return ;

   if (TimeEntry)
  {
     bool cond = IsEntryTime();
     if (!cond) return ;
  }

   if (PriceEntry)
  { 
    cond = (( Bid >= Price && lbid < Price) || ( Bid <= Price && lbid > Price));
     if (!cond) return ;
  }
        
         double lastlot = GetLastTrade();
         if (lastlot >= 0 )
        {
           if (counter > 0 )
          {
             if (!RestartNewCycle) return ;
          }
        
     if (FirstLong) 
      buysig = true ; 
     else 
      sellsig = true ;
      
    lpos = 0 ;
    Lot = lots[ 0 ];
        }

         else
        {
    lpos++;

     int BE = 0 ;
     if (lord > 0 && lcp == lop+BE* Point ) lpos--;
     if (lord < 0 && lcp == lop-BE* Point ) lpos--;

    Lot = lots[lpos];
     if (lord > 0 ) 
      sellsig = true ;
     else if (lord < 0 ) 
      buysig = true ;
  }
}

void CheckForOpen() {
   int     res,tr,TP;
   //---- sell conditions
   if (sellsig && co== 0 )  {
           Print ( "sell open " ,Lot, " " ,lpos);
      res = OpenAtMarket( OP_SELL ,Lot,TakeProfit,lpos);
           if (res> 0 ) { tlot=Lot; }
       return ;
   }
   //---- buy conditions
   if (buysig && co== 0 )  {
           Print ( "buy open " ,Lot, " " ,lpos);
      res = OpenAtMarket( OP_BUY ,Lot,TakeProfit,lpos);
           if (res> 0 ) { tlot=Lot; }
       return ;
   }
}
  
int OpenAtMarket( int mode, double lot, int TP, int pos) {
   int     res,tr,col;
   double openprice,sl,tp;
   tries= 0 ;
   while (res<= 0 && tries<OrderTriesNumber) {
      tr= 0 ; while (tr< 5 && ! IsTradeAllowed ()) { tr++; Sleep ( 2000 ); }
       RefreshRates ();
       if (mode== OP_SELL ) {
         openprice= Bid ; 
         if (StopLoss> 0 ) sl=openprice+StopLoss* Point ;
         if (TP> 0 ) tp=openprice-TP* Point ;
         col=Red;
      } else {
         openprice= Ask ;
         if (StopLoss> 0 ) sl=openprice-StopLoss* Point ;
         if (TP> 0 ) tp=openprice+TP* Point ;
         col=Blue;
      }
      res= OrderSend ( Symbol (),mode,lot,openprice,slippage,sl,tp,pos+ "_" +EAName+ "_" +expertId,expertId, 0 ,col);
      tries++;
   }
   Print ( "market order:: " , Symbol (), "  " ,mode, "  " ,lot, "  " ,openprice, "  " ,sl, "  " ,tp, "  " ,pos+ "_" +EAName+ "_" +expertId);
   if (res<= 0 ) Print ( "error opening order : " ,ErrorDescription(GetLastError()));
   return (res);
}


void DoBreakEven( int BP, int BE) {
   bool bres;
   for ( int i = 0 ; i < OrdersTotal (); i++) {
       if ( ! OrderSelect (i, SELECT_BY_POS ) )   continue ;
       if ( OrderSymbol () != Symbol () || OrderMagicNumber () != expertId )   continue ;
       if ( OrderType () == OP_BUY ) {
         if ( Bid < OrderOpenPrice ()+BP* Point ) continue ;
         if ( OrderOpenPrice ()+BE* Point - OrderStopLoss ()> Point / 10 ) {
               //Print(BP,"  ",BE," bestop");
               bres= OrderModify ( OrderTicket (), OrderOpenPrice (), OrderOpenPrice ()+BE* Point , OrderTakeProfit (), 0 , Black);
                                   if (!bres) Print ( "Error Modifying BE BUY order : " ,ErrorDescription(GetLastError()));
         }
      }

       if ( OrderType () == OP_SELL ) {
         if ( Ask > OrderOpenPrice ()-BP* Point ) continue ;
         if ( OrderStopLoss ()-( OrderOpenPrice ()-BE* Point )> Point / 10 ) {
               //Print(BP,"  ",BE," bestop");
               bres= OrderModify ( OrderTicket (), OrderOpenPrice (), OrderOpenPrice ()-BE* Point , OrderTakeProfit (), 0 , Gold);
                                   if (!bres) Print ( "Error Modifying BE SELL order : " ,ErrorDescription(GetLastError()));
         }
      }
   }
   return ;
}

/*
int FindPos(double ls) {
   for (int i=0; i<plen; i++) {
      if (NormalizeDouble(MathAbs(lots[i]-ls),3)<0.001) return(i);
   }
   return(-1);
}
*/
 
qgmql : aşağıdaki kaynakta lot ilerlemesi için yazılmış kodu vurgulayın? (ve lütfen kaynağın bir bölümünü nasıl vurgulayacağınızı da söyleyin.

  1. init'te
    extern string LotsProgression= "0.1;0.1;0.2;0.3;0.4;0.6;0.8;1.1;1.5;2.0;2.7;3.6;4.7;6.2;8.0;10.2;13.0;16.5;20.8;26.3;33.1;41.6;52.2;65.5;82.5;103.9;130.9;165;207.9;262;330.1;416;524.7;661.1" ;
    olur
      double lots[]

  2. Girintiyi düzeltin ve lot[] 'un nerede kullanıldığını göreceksiniz
     double lastlot = GetLastTrade();
    if (lastlot >= 0 ){
       if (counter > 0 ){
           if (!RestartNewCycle) return ;
       }
    
       if (FirstLong) buysig = true ; 
       else            sellsig = true ;
    
       lpos = 0 ;
       Lot = lots[ 0 ];
    }
    else {
       lpos++;
    
       int BE = 0 ;
       if (lord > 0 && lcp == lop+BE* Point ) lpos--;
       if (lord < 0 && lcp == lop-BE* Point ) lpos--;
    
       Lot = lots[lpos];
       if (lord > 0 )        sellsig = true ;
       else if (lord < 0 )   buysig = true ;
    }
    
  3. if (lord > 0 && lcp == lop+BE* Point )
    == işlenen. - MQL4 forumu


 
qgmql :

EA'm için "LotsProgression" özelliğinin kodunu almak için çok denedim ama kafa karıştırıcı.


kafan karışan ne sorunu açıklayabilir misin
 

Sanırım bu #property katı ile i,j,k değerini bir değere başlatmanız gerekecek...


int i=0,j=0,k=0;

PipPip...Jimdandy