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.
 
Lütfen bana söyle. 600'ün üzerindeki bir yapıda. Bir komisyoncu gerçek hacimler verebilir mi?
Neden: