MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 982

 
 int x= 0 ;
  int scale_mas[ 13 ]={ 0 , 1 , 2 , 4 , 8 , 16 , 32 , 64 , 128 , 256 , 512 , 1024 , 2048 , 4096 };//объявление массива

 for ( int i= 0 ;i < ArraySize (scale_mas);i++){
    if (x == scale_mas[ 0 ])x = scale_mas[ 1 ];                       //если х=индекс0, то х=индекс1
     if (x >= ArraySize (scale_mas))x = scale_mas[ 11 ];              //если х>= размер массива, то х=индекс11
    i=x;
    if ( ObjectGetInteger ( 0 , "Button+" , OBJPROP_STATE ) == false ){   //если кнопка "+" нажата
       i=i+ 1 ;                                                    //увеличиваем индекс на 1
        ObjectSetInteger ( 0 , "Button+" , OBJPROP_STATE , true );}
                        
    x=i;							 //присваиваем х значение последнего индекса
    if ( ObjectGetInteger ( 0 , "Button-" , OBJPROP_STATE ) == false ){   //если кнопка "-" нажата
       i=i- 1 ;                                                    //уменьшаем индекс на 1
     ObjectSetInteger ( 0 , "Button-" , OBJPROP_STATE , true );}
                            
    x=i;                                                         //присваиваем х значение последнего индекса
 ObjectSetString ( 0 , "=TrendLine" , OBJPROP_TEXT ,scale_mas[x]);}}    //выводим результат scale_mas[x]
Dün kodu yazdım, olması gerektiği gibi çalışıyor gibi görünüyor ama sadece artı butonu ile dizinin en uç değerine ulaştığımda dizinin başına sıfırlanıyor ve tekrar yukarı hareket ediyor. Dizinin en üst değerine ulaştığında, artı düğmesine daha fazla tıklandığında üst dizinde durması ve dizinin altına sıfırlama olmaması için koda ne eklenebilir veya düzeltilebilir? Veya bu fikri düğme tıklamalarıyla uygulamak için kod bir şekilde basitleştirilebilir mi?
 
Ivan Revedzhuk :
Dün kodu yazdım, olması gerektiği gibi çalışıyor gibi görünüyor ama sadece artı butonu ile dizinin en uç değerine ulaştığımda dizinin başına sıfırlanıyor ve tekrar yukarı hareket ediyor. Dizinin en üst değerine ulaştığında, artı düğmesine daha fazla tıklandığında üst dizinde durması ve dizinin altına sıfırlama olmaması için koda ne eklenebilir veya düzeltilebilir? Veya bu fikri düğme tıklamalarıyla uygulamak için kod bir şekilde basitleştirilebilir mi?
 if (x >= ArraySize (scale_mas))
 ArraySize (scale_mas)-1;              //если х>= размер массива, то ....

Muhtemelen.

 
Alexey Viktorov :

Muhtemelen.

onu da denedim aynı şekilde çalışıyor

 
Ivan Revedzhuk :

onu da denedim aynı şekilde çalışıyor

Hemen fark etmedim ama neden bir döngü var?

 
Alexey Viktorov :

Hemen fark etmedim ama neden bir döngü var?

onsuz nasıl mümkün olabilir? Sadece en iyisini nasıl yapacağımı bilmiyorum ve mantık çerçevesinde düşündüğümü yapıyorum.

 
Ivan Revedzhuk :

onsuz nasıl mümkün olabilir? Sadece en iyisini nasıl yapacağımı bilmiyorum ve mantık çerçevesinde düşündüğümü yapıyorum.

Peki, mantık farklı olmalı. Dizinin indeksi olan + düğmesine basıldı. Maksimuma ulaştı, artmıyor, ancak maksimumda kalıyor. Düğmeye bastım - indeks azaldı. Sıfıra ulaştı, basmaya yanıt vermiyor, 0 indeksinde kalıyor.

Yoksa başka bir fikir mi vardı?

not; Ve bu soruya yanıt olarak bayraklarla çalışma örneğini kim yayınladı ve sildi? Neden kaldırıldı? Sonuçta, bu bir kişi için gerçekten iyi bir karar. Neden sınırlı bir diziye ihtiyacı var ???
 
Alexey Viktorov :

Peki, mantık farklı olmalı. Dizinin indeksi olan + düğmesine basıldı. Maksimuma ulaştı, artmıyor, ancak maksimumda kalıyor. Düğmeye bastım - indeks azaldı. Sıfıra ulaştı, basmaya yanıt vermiyor, 0 indeksinde kalıyor.

Yoksa başka bir fikir mi vardı?

not; Ve bu soruya yanıt olarak bayraklarla çalışma örneğini kim yayınladı ve sildi? Neden kaldırıldı? Sonuçta, bu bir kişi için gerçekten iyi bir karar. Neden sınırlı bir diziye ihtiyacı var ???

Hayır, fikir tam olarak buydu. Nasıl doğru yapacağımı gerçekten bilmiyorum, bu yüzden olduğu gibi yaptım. Ama fark ettim ki programda loop çalışırken grafikteki butonlara tıklayarak loop tıklanana kadar diğer her şey çalışmıyor. Her şey duraklamış gibi. Bunun neden olduğu açık değil. Fikri bir şekilde farklı bir şekilde uygulamak için seçenekler varsa, minnettar olacağım ...

 

Her şey. Sorunu çözdüm) diziler ve diğer şeyler olmadan. Çok daha kolay olduğu ortaya çıktı)))

İkinci soru olgunlaşmıştır. Fare ile bağlam menüsünden Uyarı ayarlandığında görünen ok ayarı ile kodda Uyarı tetikleme düzeyini nasıl ayarlayabilirim?

Uyarı sorusu.

 

Yardım, lütfen, bu danışmana böyle bir işlev eklemek mümkün mü, böylece EURUSD penceresine kurulu danışman, aynı açılış parametreleriyle aynı anda, ancak GBPUSD için bir anlaşma açar, ancak EURUSD için açılmaz.

//+------------------------------------------- -------------------------------------------------- ------------------------------------------------+

//| Geliştirici: Andrey Minaev |

//| Uzman Danışman: Stochastic.mq4 |

//| Web sitesi: safe-forex.ru |

//| Posta: minaev.work@mail.ru |

//| Skype: canlı:minaev.work |

//+------------------------------------------- -------------------------------------------------- ------------------------------------------------+

#özellik telif hakkı "Safe-Forex.ru"

#özellik bağlantısı "https://safe-forex.ru"

#mülkiyet katı


extern bool Use_Symbol1 = true;

harici dize Symbol1 = "USDJPY";


giriş dizisi ayarları = ""; // Danışman ayarları

giriş int büyü = 111; // Büyü

giriş çift düzeltme Hacim = 0.01; // Ses

girdi int kar almak = 500; // Kâr

giriş int stopLoss = 500; // Kayıp

giriş int buyLevel = 100; // 25 Seviye Satın Al

giriş int sellLevel = 0; // 75 Satış seviyesi


harici int ADXperiod=15; //ADX dönemi 15

harici intADXLevel=1;


harici intMAperiod=360; //MA dönemi 80

harici int MAperiod_2 =360; //MA dönemi 80



girdi dizesi stochSettings = ""; // Stokastik Osilatör gösterge ayarları

giriş int stochPeriodK = 5; // Dönem %K

giriş int stochPeriodD = 3; // Dönem %D

giriş int stochYavaşlama = 3; // yavaşlatmak

ENUM_STO_PRICE stochPrice girin = STO_LOWHIGH; // Fiyat:% s

ENUM_MA_METHOD stochMethod girin = MODE_SMA; // Yöntem


tarihsaat newCandle; // mevcut grafikte yeni mum

bool allowOpenBuy, // bir Satın Alma pozisyonu açma izni

izinOpenSell; // Satış pozisyonu açma izni

//+------------------------------------------- -------------------------------------------------- ------------------------------------------------+

int OnInit(void)

{

INIT_SUCCESSED döndür;

}

//+------------------------------------------- -------------------------------------------------- ------------------------------------------------+

geçersiz OnDeinit(const int nedeni)

{

}

//+------------------------------------------- -------------------------------------------------- ------------------------------------------------+

geçersiz OnTick(void)

{

if(newCandle!=Zaman[0]) CheckSignalExist(); newCandle=Zaman[0];

if(allowOpenBuy) OpenPosition(OP_BUY);

if(allowOpenSell) OpenPosition(OP_SELL);

}

//+------------------------------------------- -------------------------------------------------- ------------------------------------------------+

//| İşlev, geçerli fiyattan bir pozisyon açar |

//+------------------------------------------- -------------------------------------------------- ------------------------------------------------+

geçersiz OpenPosition(int tipi)

{


çift fiyat=0.0;

if(type==OP_BUY) fiyat=Sor;

if(type==OP_SEL) fiyat=Teklif;

int bilet=OrderSend(_Symbol,type,fixVolume,price,0,0,0,"",magic,0);

// int bilet=OrderSend(,type,fixVolume,price,0,0,0,"",magic,0);

uyku(1000);

if(bilet>0)

{

if(type==OP_BUY)

{

Print("Satın alma pozisyonu açıldı, bilet: ",bilet);

allowOpenBuy=yanlış;

// SetStopOrders(bilet);

}

if(type==OP_SEL)

{

Print("Satış pozisyonu açıldı, bilet: ",bilet);

allowOpenSell=yanlış;

// SetStopOrders(bilet);

}

}

if(bilet<0)

{

if(type==OP_BUY) Print("Satın alma pozisyonu açılmadı, hata: ",GetLastError());

if(type==OP_SELL) Print("Satış pozisyonu açılmadı, hata: ",GetLastError());

}

}

//+------------------------------------------- -------------------------------------------------- ------------------------------------------------+

//| İşlev, durdurma emirlerini ayarlar |

//+------------------------------------------- -------------------------------------------------- ------------------------------------------------+

// SetStopOrders'ı geçersiz kıl(int bilet)

//{

// double stopLevel=MarketInfo(_Symbol,MODE_STOPLEVEL),

// yayılma =MarketInfo(_Symbol,MODE_SPREAD),

// tp=almakKar,

// sl=kaybı durdur;

// stopLevel+=spread;

// if(tp<durdurDüzey)

// {

// tp=stopSeviye;

// Print("Minimum kar mesafesi seti");

// }

// if(sl<stopLevel)

// {

// sl=stopLevel;

// Print("Kayıp için minimum mesafe ayarlandı");

// }

// if(SiparişSeç(bilet,SELECT_BY_TICKET))

// {

// int tip=SiparişTürü();

// çift opp =OrderOpenPrice();

// if(type==OP_BUY) {tp=opp+tp*_Point; sl=opp-sl*_Nokta;}

// if(type==OP_SELL) {tp=opp-tp*_Point; sl=opp+sl*_Nokta;}

// if(OrderModify(bilet,opp,sl,tp,0))

// {

// if(type==OP_BUY) Print("Al pozisyonu için kar ve zarar seviyeleri belirlendi, bilet: ",bilet);

// if(type==OP_SELL) Print("Sat pozisyonu için kar ve zarar seviyeleri belirlendi, bilet: ",bilet);

// }

// başka {

// if(type==OP_BUY) Print("Satın alma pozisyonu için kar ve zarar seviyeleri ayarlanmadı, bilet: ",ticket,", error: ",GetLastError());

// if(type==OP_SELL) Print("Sat pozisyonu için kar ve zarar seviyeleri belirlenmedi, bilet: ",ticket,", error: ",GetLastError());

// }

// }

//}

//+------------------------------------------- -------------------------------------------------- ------------------------------------------------+

//| İşlev, bir sinyal olup olmadığını kontrol eder |

//+------------------------------------------- -------------------------------------------------- ------------------------------------------------+

geçersiz CheckSignalExist(void)


{

double ADX1=iADX(Symbol(),Period(),ADXperiod,0,MODE_MAIN,1); /////////////////////////

double ADX2=iADX(Symbol(),Period(),ADXperiod,0,MODE_MAIN,2);

double DPLUS=iADX(Symbol(),Period(),ADXperiod,0,MODE_PLUSDI,1);

double DMINUS=iADX(Symbol(),Period(),ADXperiod,0,MODE_MINUSDI,1);

double MA=iMA(Symbol(),Period(),MAperiod,0,MODE_SMA,0,1);

double MA_2=iMA(Symbol(),Period(),MAperiod_2,0,MODE_SMA,0,1);


//PERIOD_H1

double mainLine1=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_MAIN,1),

mainLine2=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_MAIN,2),

signLine1=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_SIGNAL,1),

signLine2=iStochastic(_Symbol,PERIOD_CURRENT,stochPeriodK,stochPeriodD,stochSlowing,stochMethod,stochPrice,MODE_SIGNAL,2);

Comment(" ", (Sor-Teklif)/1.5," ",Teklif-Kapat[1]," ", Sor-Kapat[1]);

// if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel

// && iClose(Symbol(),Period(),1)>MA&& iClose(Symbol(),Period(),1)>MA_2 && signLine1<buyLevel && signLine2<buyLevel

if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel

// &&Kapat[2]<MA&& Kapat[2]<MA_2 && signLine1<buyLevel && signLine2<buyLevel

&&Kapat[10] > Kapat[1]-(Kapat[1]-Kapat[20])

&& Kapat[10]>Teklif )

{

Print("Bir Alış pozisyonu açmak için bir sinyal var");

if(GetPositionsNumber()==0)

{

// allowOpenSell=true;

allowOpenBuy=true;

uyku(1000);

Print("Satın alma pozisyonu açmaya izin verildi");

}

}

// if(mainLine1<signLine1 && mainLine2>signLine2 && mainLine1>sellLevel && ADX1>ADXLevel&& mainLine2>sellLevel

// && iClose(Symbol(),Period(),1)<MA&& iClose(Symbol(),Period(),1)<MA_2 && signLine1>sellLevel && signLine2>sellLevel

if(mainLine1>signLine1 && mainLine2<signLine2 && mainLine1<buyLevel && ADX1>ADXLevel && mainLine2<buyLevel

// &&Close[2]>MA&& Kapat[2]>MA_2 && signLine1<buyLevel && signLine2<buyLevel

&&Kapat[10] < Kapat[1]+(Kapat[20]-Kapat[1])

&& Kapat[10]<Sor )

{

Print("Satış pozisyonu açmak için bir sinyal var");

if(GetPositionsNumber()==0)

{

//allowOpenBuy=true;

allowOpenSell=true;

uyku(1000);

Print("Satış pozisyonu açmaya izin verildi");

}

}

}
















////////////////////////////////////



//+------------------------------------------- -------------------------------------------------- ------------------------------------------------+

//| İşlev, açık pozisyonların sayısını döndürür |

//+------------------------------------------- -------------------------------------------------- ------------------------------------------------+







int GetPositionsNumber(void)

{

int sayı=0;

for(int i=0; i<SiparişToplam(); i++)

if(SiparişSeçimi(i,SELECT_BY_POS))

if(OrderSymbol()==_Symbol && OrderMagicNumber()==sihir)

sayı++;

dönüş numarası;

}

//+------------------------------------------- -------------------------------------------------- --------------------------------

 
vvs1 :

Yardım, lütfen, bu danışmana bir işlev eklemek mümkün mü, böylece EURUSD penceresine kurulan danışman, aynı açılış parametreleriyle aynı anda, ancak GBPUSD için bir anlaşma açar, ancak EURUSD için açılmaz.

Affedersiniz, kafanız iyi mi? Kod sadece bir yerden girmekle kalmadı, hatta yorum yapılan satırları silmedi ve hatta büyük miktarda boş satır bıraktı.

Yardım istediğin kişilere saygı göstermemiz gerektiğini düşünmüyor musun???