Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 505

 
Forexman77 :
Elbette gerekli! Peki, bu yapıyı minimum arayışına nasıl uygulayabiliriz? beynimle çözemiyorum)

Maksimumu aramak için, val değişkenine 0 değeri atanır (kesinlikle göstergenin değerlerinden herhangi birinden daha az).

Bu, minimumu bulmak için daha yüksek bir değer atamak gerektiği anlamına gelir. EMPTY_VALUE sabitini veya doğrudan minimum aramanın yapıldığı bazı çubuklardaki göstergenin değerini kullanabilirsiniz.

val= EMPTY_VALUE ;

for (i= 1 ;i<= 15 ;i++) {

    ind= iMA (...,i);

   if (ind < val) val=ind;

}

Veya bunun gibi:

val= MA (..., 1 );


for (i= 2 ;i<= 15 ;i++) {

    ind= iMA (...,i);

   if (ind < val) val=ind;

}
 
Forexman77 :

Elbette gerekli! Peki, bu yapıyı minimum arayışına nasıl uygulayabiliriz? beynimle çözemiyorum)
Evet ve bir diziyi nasıl bildireceğimi öğrenmek istiyorum. Bu şekilde denedim:

-1 çıkıyor.



Döngü 34'ün üzerinde değer yinelenir ve dizi yalnızca 33 hücre içerir, düzeltin.

Ve yine de ArrayMinimum'u deneyin (num_array, WHOLE_ARRAY ,0);

 
Forexman77 :

... Evet ve bir diziyi nasıl bildireceğimi öğrenmek istiyorum ...

Eğer sadece eğitim ve eğitim amaçlıysa...

Minimum ve maksimumun belirlendiği süre - bu, ayarlama ve optimizasyon olasılığını sağlamak için harici bir parametre olmalıdır.

 extern int p= 34 ; 

Bu yüzden önce dizi boyutsuz olarak bildirilir:

 double val[];

Dizi bildirimi bir fonksiyonda değil, genel bir bölümde yapılır.

init işlevinde dizinin boyutu ayarlanır:

 int init(){

   ArrayResize (val,p);

} 

Şimdi start fonksiyonunda diziyi dolduruyoruz:

 for ( int i= 0 ;i<p;i++) val[i]= iMA (...,i + 1 );

Son olarak, diziye ArrayMaximum() ve ArrayMinimum() uygulayın.

 
Integer :

Maksimumu aramak için, val değişkenine 0 değeri atanır (kesinlikle göstergenin değerlerinden herhangi birinden daha az).

Bu, minimumu bulmak için daha yüksek bir değer atamak gerektiği anlamına gelir. EMPTY_VALUE sabitini veya aralarında minimum aramanın yapıldığı bazı çubuklardaki göstergenin değerini doğrudan kullanabilirsiniz.

Veya bunun gibi:

Çok teşekkürler!
 
evillive :

Döngü 34'ün üzerinde değer yinelenir ve dizi yalnızca 33 hücre içerir, düzeltin.

Ve yine de ArrayMinimum'u deneyin (num_array, WHOLE_ARRAY ,0);

Çok teşekkürler!
 

Sevgili programcılar! Zor durumdayım lütfen yardım edin.

Bu kod hakkında kafamı çoktan kırdım.

 //В условии прописано что работаем с 
if ( OrderType () == OP_BUY ){}
//, но метатрейдер почему то игнорирует это условие, и работает только с OP_SELLLIMIT

İşte tüm fonksiyon:

 //+------------------------------------------------------------------+
//| Модифицируем стоплоссы                                           |
//+------------------------------------------------------------------+   
void modify_stoploss()
  {
   for ( int i= 0 ; i<= OrdersTotal (); i++)
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
        {
         if ( OrderSymbol ()== Symbol ())
           {
             if ( OrderMagicNumber ()==magic)
              {
               if ( OrderType () == OP_BUY )
                 {
                   if (chek_way()== 1 )
                    {
                     double stoploss= NormalizeDouble (pre_openPrice( OP_BUY ), Digits );
                     Print ( "Стоплосс для Бай " , OrderTicket (), " = " , stoploss);
                     OrderModify ( OrderTicket (), OrderOpenPrice (),stoploss, OrderTakeProfit (), 0 ,CLR_NONE);
                    }
                 }
               if ( OrderType () == OP_SELL )
                 {
                   if (chek_way()== 0 )
                    {
                     stoploss= NormalizeDouble (pre_openPrice( OP_SELL ), Digits );
                     Print ( "Стоплосс для Cелл " , OrderTicket (), " = " , stoploss);
                     OrderModify ( OrderTicket (), OrderOpenPrice (),stoploss, OrderTakeProfit (), 0 ,CLR_NONE);
                    }
                 }
              }
           }
        }
     }
  }

Print'e geliyor ve ürettiği şey şu:


Bilet: 225299700, bir OP_SELLLIMIT sipariş biletidir.

Ve sonra her şey, beklendiği gibi, bu seçilen siparişin durdurma kaybını değiştirir. Ve OP_BUY, elbette ki olmalarına rağmen, boş görmez:

Sorun ne olabilir? Bunu bana neden yapıyor? Çözmeme yardım et lütfen!

 
#property strict
#include <Indicators\Trend.mqh>
bool ind;
CiMA MA;
extern int pos= 1 ;
extern int sl= 40 ;
extern int tp= 70 ;
datetime time;
datetime time2;
bool trade= false ;
bool trade2= false ;
int a,b;
int OnInit ()
  {
//---
   MA.Create( Symbol (), PERIOD_CURRENT , 10 , 6 , MODE_EMA , PRICE_CLOSE ); //создал машку
//---
   return ( INIT_SUCCEEDED );
   
  }
void OnTick ()
  {
//---
   if (IsNewBar()== true ) //если новый бар включаемся
     {
     if (buy(pos)== true ) //если цена выше МА продолжаем
     {
       if (!ExistPositions( Symbol (),- 1 ,- 1 , 0 )) //если нету открых ордеров продолжаем
        {

         if (GetTypeLastClosePos( Symbol (),- 1 )!= OP_BUY ) //если тип последней закрытой позиции был не на покупку то тогда только покупаем таким образом я пред остерегаюсь от повторных входов в покупку если цена 
//все ещо выше МА...но почему то не работает открываются и дальше сделки на покупку если ордер закрылся выше МА....ХОТЯ НЕ ДОЛЖО ТАК КАК Я ОГРАНИЧИЛ ПО ТИПУ ПОЗИЦИИ ПОСЛЕДНЮЮ СДЕЛКУ И ОНИ ДОЛЖНЫ ТОЛЬКО 
//       ЧЕРЕДОВАТСЯ И УЖ НИ КАК НЕ ПОВТОРЯТСЯ ПО НЕСКОЛЬКО РАЗ ПОДРЯД
           {
            trade= true ;
           }
   if (trade== true )
        {
         OpenPosition( Symbol (), OP_BUY , 0.1 , Ask -sl* Point , Ask +tp* Point );
         trade= false ;
        }
}
        }
    
     
if (sell(pos)== true )
{
   if (!ExistPositions( Symbol (),- 1 ,- 1 , 0 ))
     {

       if (GetTypeLastClosePos( Symbol (),- 1 )!= OP_SELL )
        {
         trade2= true ;
        }

       if (trade2== true )
        {
         OpenPosition( Symbol (), OP_SELL , 0.1 , Bid +sl* Point , Bid -tp* Point );
         trade= false ;
      }
  }}
 }
  }

//возвращает истину если закрытие бара  с указаной позицией выше МА

bool buy( int pos)
  {
   if ( iClose ( Symbol (), 0 ,pos)>MA.Main( 1 ))
       return true ;
   else
       return false ;
  }
//+------------------------------------------------------------------+
//| возвращает истину если закрытие бара  с указаной позицией ниже МА
//+------------------------------------------------------------------+
bool sell( int pos)
  {
   if ( iClose ( Symbol (), 0 ,pos)<MA.Main( 1 ))
       return true ;
   else return false ;
  }
Alım ve satım için iki koşul dışında TÜM FONKSİYONLAR Kim'in şubesinden alınır ...... lütfen nerede hata yaptığımı söyleyin ... bir kavşakta bir işleme ihtiyacınız var
 

fonksiyon hakkında başka bir soru

/SetRectangle( clrBlue , "Прямоугольник" , Time [ 10 ], Low [ 10 ], Time [ 0 ], High [ 0 ]);
//Если bk=true, то будет залит цветом, если false - то просто "рамка" ... sz при "просто рамка" - это ширина линий "рамки"
//

//+----------------------------------------------------------------------------+
void SetRectangle( color cl, string nm= "" , datetime t1= 0 , double p1= 0 , datetime t2= 0 , double p2= 0 , int sz= 0 , bool bk= true ) {
   if ( ObjectFind (nm)< 0 ) ObjectCreate (nm, OBJ_RECTANGLE , 0 , 0 , 0 , 0 , 0 );
   ObjectSet (nm, OBJPROP_TIME1    ,t1);
   ObjectSet (nm, OBJPROP_PRICE1   ,p1);
   ObjectSet (nm, OBJPROP_TIME2    ,t2);
   ObjectSet (nm, OBJPROP_PRICE2   ,p2);
   ObjectSet (nm, OBJPROP_COLOR    ,cl);
   ObjectSet (nm, OBJPROP_WIDTH    ,sz);
   ObjectSet (nm, OBJPROP_BACK     ,bk);
}

dikdörtgen nasıl önde çizilir ve arkada değil, örneğin belirtilen fiyattan beş çubuk ileride ...... ve yeniden çizilmez

 
artmedia70 :

Baktım. Teşekkür ederim.

Ancak soruda çok az bilgi var. Bir ayda saatlik çubuklarda birçok ekstremum vardır. Ve bu arada, tam olarak neyin ekstremumu?


Sadece iki aylık ekstremum olduğunu varsaydım - min ve max ... peki, Tanrı onları korusun, ilk başta kod uzun olduğu ortaya çıktı, bu yüzden yardım istedim ... ama aklıma geldi, dörde sığdı çizgiler.
[Silindi]  
Lütfen bana söyle. 600'ün üzerindeki bir yapıda. Bir komisyoncu gerçek hacimler verebilir mi?