[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 597

 
Craft :

İyi günler, kodlama ile uğraşmaya devam ediyorum, öğretici bölümündeki bir makaleden bir danışman örneği aldım, kodu örnekten değiştirdim:

Eğitim için keyfi olarak:

İşlemler görüntülenmiyor, lütfen nedenini, kodu nasıl düzelteceğimi söyleyin.


 double MA_1[]; // нет обьявления размера, не видно как (локально или глобально) обьявлен, 
// не видно оператора двигающего индекс массива.
// лучше пока не освоили работу с массивами обьявите переменные и не парьтесь

   double MA_0= iMA ( NULL , 0 ,Period_MA, 0 , MODE_EMA , PRICE_CLOSE , 0 );
   double MA_1= iMA ( NULL , 0 ,Period_MA, 0 , MODE_EMA , PRICE_CLOSE , 1 );
  
  if (MA_1 < MA_0)
     {                                           // ..МА последнего бара выше предыдущего
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (MA_1 > MA_0)
     {                                           // ..МА последнего бара ниже предыдущего
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }
 

Urain , teşekkürler, mql mantığına hayran kalmayı asla bırakmam ve for(int i=1; deneyin, komut dosyası basitleştirilemez - bana nasıl düzenleneceğini söyleme, yine de yapamam diziyi hareket ettiren operatörü belirlemek için ne aracılığıyla dilin mantığını hissedin?

PS Diziyi bildirdim, örnek komut dosyasında yanlışlıkla sildim:

   double MA_1[];
   ArrayResize (MA_1,Period_MA);

   MA_1[ 0 ]= iMA ( NULL , 0 ,Period_MA, 0 , MODE_EMA , PRICE_CLOSE , 0 );

   if (MA_1[ 1 ] < MA_1[ 0 ])
     {                                           // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (MA_1[ 1 ] > MA_1[ 0 ])
     {                                           // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }
 
Abzasc :
Fiyat farkı. Sonuç olarak, farklı, aksine, göstergelerin sonuçları ...
Orada farklı bir şey görmüyorum. Göstergeleri unutun, bir kez daha tekrar ediyorum, ticaret yaptığınız sizin için doğru olanıdır. Doğru şeylere odaklanmıyorsun.
 
#özellik göstergesi_separate_window
#özellik göstergesi_tamponları 2
#özellik göstergesi_color1 Mavi
#özellik göstergesi_renk2 Kırmızı

harici int n = 20;
harici int t3_period = 5;
dış çift b = 0.618;
harici int mbar = 300;
harici int Çubuklar.Sayı = 0;
int i,t,c;
double Buf1[],Buf2[],CF_p[5001],CF_n[5001],Ch_p[5001],Ch_n[5001],k_n,k_p,ch_p,ch_n,cff_p,cff_n,
AcBars,t3,t32,A1,A2,b2,b3,c1,c2,c3,c4,e1,e2,e3,e4,e5,e6,n1,w1,w2,e12,e22,e32,e42,e52, e62;


//+------------------------------------------- --------------------+
int() {
SetIndexStyle(0, DRAW_LINE);
SetIndexBuffer(0, Buf1);
SetIndexStyle(1, DRAW_LINE);
SetIndexBuffer(1, Buf2);
dönüş(0); }
//+------------------------------------------- --------------------+
int start() {
int limiti;
if (IndicatorCounted()<0) return(-1);
limit=Bars-IndicatorCounted();
if (Bars.Count>0 && limit>Bars.Count) limit=Bars.Count;
for(int i=0; i<limit; i++)
{

b2=b*b; b3=b2*b; c1=-b3; c2=(3*(b2+b3)); c3=-3*(2*b2+b+b3); c4=(1+3*b+b3+3*b2); n1=t3_periyodu;

if(n1<1) n1=1; n1=1+0.5*(n1-1); w1=2/(n1+1); w2=1-w1;

if(AcBars==0) AcBars=Bars-mBars;

for(c=AcBars; c<=Bars-1; c++) { i=Bars-1-c; {

if(Kapat[i]>Kapat[i+1]) { Ch_p[i]=Kapat[i]-Kapat[i+1]; CF_p[i]=Ch_p[i]+CF_p[i+1]; Ch_n[i]=0; CF_n[i]=0; }
başka { Ch_p[i]=0; CF_p[i]=0; Ch_n[i]=Kapat[i+1]-Kapat[i]; CF_n[i]=Ch_n[i]+CF_n[i+1]; }}

for(t=i+n; t>=i; t--) { ch_p=Ch_p[t]+ch_p; ch_n=Ch_n[t]+ch_n ; cff_p=CF_p[t]+cff_p; cff_n=CF_n[t]+cff_n; }

k_p=ch_p-cff_n; k_n=ch_n-cff_p;

A1=k_p; e1=w1*A1+w2*e1; e2=w1*e1+w2*e2; e3=w1*e2+w2*e3; e4=w1*e3+w2*e4;
e5=w1*e4+w2*e5; e6=w1*e5+w2*e6; t3=c1*e6+c2*e5+c3*e4+c4*e3; Buf1[i]=t3;

A2=k_n; e12=w1*A2+w2*e12; e22=w1*e12+w2*e22; e32=w1*e22+w2*e32; e42=w1*e32+w2*e42;
e52=w1*e42+w2*e52; e62=w1*e52+w2*e62; t32=c1*e62+c2*e52+c3*e42+c4*e32; Buf2[i]=t32;

AcBars=AcBars+1; ch_p=0; ch_n=0; cff_p=0; cff_n=0; }
}

dönüş(0); }


Hatanın nerede güncellenmediğini söyle, geçmiş normal görünüyor ama çevrimiçi değil

Dosyalar:
 

Tünaydın. Dizi bildirilir, dizi dizinini hareket ettiren operatör belirlenir, sipariş verilmez. Bana neyin yanlış olduğunu söyle.

   double MA_1[];
   ArrayResize (MA_1,Period_MA);

   for ( int j= 0 ;j<=Period_MA- 1 ;j++)
   MA_1[j]= iMA ( NULL , 0 ,Period_MA, 0 , MODE_EMA , PRICE_CLOSE ,j);

   
   if (MA_1[j+ 1 ] < MA_1[j])
     {                                           // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (MA_1[j+ 1 ] > MA_1[j])
     {                                           // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }
 

OrderSend kaydolmayı deneyin, sonra her şey ortaya çıkacak ...

MetaEditore'daki standart yardımı okudunuz mu? Değilse, tamamını okuyun...

Craft :

Tünaydın. Dizi bildirilir, dizi dizinini hareket ettiren operatör belirlenir, sipariş verilmez. Bana neyin yanlış olduğunu söyle.

 
Beyler, kaybı belirli bir değeri aşan tüm kârsız siparişleri kapatan Igor Kim'in işlevini yeniden yapmanın mümkün olup olmadığını söyleyin:
 //+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 25.04.2008                                                     |
//|  Описание : Закрытие тех позиций, у которых убыток в валюте депозита       |
//|             превысил некоторое значение                                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    pr - профит/убыток                                                      |
//+----------------------------------------------------------------------------+
void ClosePosBySizeLossInCurrency( string sy= "" , int op=- 1 , int mn=- 1 , double pr= 0 ) {
   int i, k= OrdersTotal ();

   if (sy== "0" ) sy= Symbol ();
   for (i=k- 1 ; i>= 0 ; i--) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_TRADES)) {
       if ((OrderSymbol()==sy || sy== "" ) && (op< 0 || OrderType()==op)) {
         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
           if (mn< 0 || OrderMagicNumber()==mn) {
             if (OrderProfit()+OrderSwap()<- MathAbs (pr)) ClosePosBySelect();
          }
        }
      }
    }
  }
}
En büyük kaybı olan bir açık pozisyon bulmam gerekiyor.
Sonuç olarak, en kârsız pozisyondan daha fazla karı olan bir pozisyon bulmam ve onları karşı tarafta kapatmam gerekiyor.
Belki birisi bu konuda zaten deneyime sahiptir veya zaten böyle bir sorunla karşılaşmıştır?
 
neden farklı prensiplerde çalışan üç gösterge neredeyse aynı resmi gösteriyor (mızrakçı, stokastik ve mcd-rsi) - ancak %60'ın üzerinde bir olasılıkla doğru hareketi ve girişi gösteremiyorlar? veya yapabilir mi?
 
Selam millet! Bu yüzden, kârda X noktasını geçip Y>OrderOpenPrice noktasına düşmeye başladıktan sonra, siparişi kapatmak için hangi kodun gerekli olduğu sorusu ortaya çıktı, bundan sonra kapatılması gerekiyor.
 
StatBars :

OrderSend kaydolmayı deneyin, sonra her şey ortaya çıkacak ...

MetaEditore'daki standart yardımı okudunuz mu? Değilse, tamamını okuyun...


Çocukluğundan beri yardıma başvurmadan soru sormak ve Yandex büyüdü. Sendov denizi, ancak pozisyonlar açılmıyor:

 double MA_1[];
   ArrayResize (MA_1,Period_MA);

   for ( int j= 0 ;j<=Period_MA- 1 ;j++)
   MA_1[j]= iMA ( NULL , 0 ,Period_MA, 0 , MODE_EMA , PRICE_CLOSE ,j);

   
   if (MA_1[j+ 1 ] < MA_1[j])
     {                                           // 
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (MA_1[j+ 1 ] > MA_1[j])
     {                                           // 
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }
   // Открытие ордеров
   while (true)                                   // Цикл закрытия орд.
     {
       if (Total== 0 && Opn_B==true)               // Открытых орд. нет +
        {                                       // критерий откр. Buy
         RefreshRates();                         // Обновление данных
         SL=Bid - New_Stop(StopLoss);     // Вычисление SL откр.
         TP=Bid + New_Stop(TakeProfit);   // Вычисление TP откр.
         Alert ( "Попытка открыть Buy. Ожидание ответа.." );
         Ticket= OrderSend (Symb,OP_BUY,Lts,Ask, 2 ,SL,TP); //Открытие Buy
         if (Ticket > 0 )                         // Получилось :)
           {
             Alert ( "Открыт ордер Buy " ,Ticket);
             return ;                             // Выход из start()
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
       if (Total== 0 && Opn_S==true)               // Открытых орд. нет +
        {                                       // критерий откр. Sell
         RefreshRates();                         // Обновление данных
         SL=Ask + New_Stop(StopLoss);     // Вычисление SL откр.
         TP=Ask - New_Stop(TakeProfit);   // Вычисление TP откр.
         Alert ( "Попытка открыть Sell. Ожидание ответа.." );
         Ticket= OrderSend (Symb,OP_SELL,Lts,Bid, 2 ,SL,TP); //Открытие Sel
         if (Ticket > 0 )                         // Получилось :)
           {
             Alert ( "Открыт ордер Sell " ,Ticket);
             return ;                             // Выход из start()
           }
         if (Fun_Error( GetLastError ())== 1 )       // Обработка ошибок
             continue ;                           // Повторная попытка
         return ;                                 // Выход из start()
        }
       break ;                                     // Выход из while
     }