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

 
denis77515 :

Merhaba beyler, profesyoneller Programlamaya yeni başlayanları reddetmeyin, doğru yazım için koda bakın. Kim onunla başa çıkmak için çok tembel değil. Bu benim ilk büyük kod yazma deneyimim.Çok para birimi olduğu için test cihazında test edemiyorum.Ama ticaret sistemi buna değer. Kod ve göstergelerin bulunduğu dosya arşive eklenmiştir .


Alış ve satış için ilgili sembol dizileri ve emir sayısı (açık pozisyonlar) oluşturmak için sizin için tek bir fonksiyon buldum, demoda birkaç pozisyon açarak bir komut dosyası ile test edin.
 string Smbl[];
int CntBuy[],CntSell[];
void OnStart ()
 {
     if (CountBuySell(Smbl, CntSell, CntBuy))
       for ( int i=0; i< ArraySize (Smbl); i++) PrintFormat ( " Symbol %s CntBuy %d CntSell %d" , Smbl[i], CntBuy[i], CntSell[i]);
 }
//-------------------
bool CountBuySell( string &symb[], int &cnt_sell[], int &cnt_buy[])
{
   int ot,n,N= 0 ,f= 0 ,cb= 0 ,cs= 0 ;
   string symbol;
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
   {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
      {
         
         ot= OrderType ()+ 1 ; if (ot> 2 )   continue ;                       // пропускаем лимит ордера
         symbol= "" ; symbol= OrderSymbol (); if (symbol== "" ) continue ;  // убедились что символ выбран
         f= 0 ; cb=0; cs=0;                                            // обнулили счетчики и флаг символа
         for (n= 0 ; n<N; n++) if (symbol==symb[n]) f= 1 ;               // если в массиве символ OrderSymbol () уже есть, то не будем увеличивать размерность массивов, просто допишем в нижнем цикле еще 1 позицию
         if (f== 0 )                                                   // такого символа symbol= OrderSymbol () еще не было, увеличим размерность массивов под новый символ и запишем этот символ
         {
            N++; 
             ArrayResize (symb,N); ArrayResize (cnt_buy,N); ArrayResize (cnt_sell,N);
            symb[N- 1 ]=symbol; cnt_buy[N- 1 ]= 0.0 ; cnt_sell[N- 1 ]= 0 ;
         }
         
         if (ot== 1 ) cb++;   // OP_BUY   для выбранного символа
         else       cs++;   // OP_SELL
         
        // перебираем массив и сравним его с выбранным символом. В найденный индекс запишем для данного символа кол-во откр позиций
        // такоим образом для каждого индекса всех 3 массивов будет соответствовать  конкретный символ и количество позиций покупки и продажи для него
         for (n= 0 ; n<N; n++) if (symbol==symb[n]) { cnt_buy[n]+=cb; cnt_sell[n]+=cs;  }
         
      }
   }
   if (N> 0 ) return ( 1 );   // есть открытые позиции
   return ( 0 );           // позиций нет
}
 
evillive :

Mevduat para biriminde belirtilen kar veya zarar değerlerine ulaşıldığında hesaptaki tüm pozisyonları kapatan (birkaç sembol için açıyorum), ancak pozisyonları göründüğünde hemen kapatan basit bir Uzman Danışman yazmaya çalışıyorum ( (((

Neyin yanlış olduğunu anlamıyorum:



Buna bir bak.


dış int kar = 30;

harici int Magic=0;

int CurProfit;

extern bool CurSymbolOnly = false;


int start() // Özel. başlatma işlevi

{

//tüm siparişlerin kar sayacı

çift p1;

int i1, kk1=SiparişlerToplam(), pr1=0;

(i1=0; i1<kk1; i1++) için

{

if ( OrderSelect (i1, SELECT_BY_POS, MODE_TRADES))

{

if (!CurSymbolOnly || OrderSymbol()==Symbol())

{

p1=MarketInfo(OrderSymbol(), MODE_POINT);

if (p1==0) if (StringFind(OrderSymbol(), Symbol())<0) p1=0,0001; başka p1=0.01;

if (OrderType()==OP_BUY)

{

pr1+=NormalizeDouble((OrderClosePrice()-OrderOpenPrice())/p1, 0);

}

if (OrderType()==OP_SEL)

{

pr1+=NormalizeDouble((OrderOpenPrice()-OrderClosePrice())/p1, 0);

}

}

}

}

CurProfit=pr1;

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



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

if (kâr<=pr1)

{

ClosePosWithMaxProfitInCurrency();

}

dönüş(0);

}

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


/// en pahalıdan en ucuza doğru kapatır

void ClosePosWithMaxProfitInCurrency(string sy="", int op=-1, int mn=-1)

{

doublepr=0;

int i5, k=SiparişToplam(), np=-1;

if (sy=="0") sy=Symbol();

(i5=k-1; i5>=0; i5--) için

{

if (Sipariş Seçimi(i5, SELECT_BY_POS, MODE_TRADES))

{

if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))

{

if (mn<0 || OrderMagicNumber()==dk)

{

if (pr<OrderProfit()+OrderSwap())

{

pr=OrderProfit()+OrderSwap();

np=i5;

}

}

}

}

}

eğer (np>=0)

{

if (OrderSelect(np, SELECT_BY_POS, MODE_TRADES))

{

{for (int i=SiparişlerToplam()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;

if (OrderType()==OP_BUY ) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),9);

if (OrderType()==OP_SELL) OrderClose (OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),9);

}

}

}

}

dolaplojnie();

}

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


// ertelemeleri kapat

boşluk dolabı()

{

for (int i=OrdersTotal()-1; i>=0; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;

if (OrderType()==OP_BUYSTOP ) OrderDelete(OrderTicket());

if (OrderType()==OP_SELLSTOP ) OrderDelete(OrderTicket());

if (OrderType()==OP_BUYLIMIT ) OrderDelete(OrderTicket());

if (OrderType()==OP_SELLLIMIT) OrderDelete(OrderTicket());

}

}

 
GSB :
Alış ve satış için ilgili sembol dizileri ve emir sayısı (açık pozisyonlar) oluşturmak için sizin için tek bir fonksiyon buldum, demoda birkaç pozisyon açarak bir komut dosyası ile test edin.


Tabii ki, bana ayrılan zaman için teşekkür ederim, ama benim için hala zor, sıkıcılık için özür dilerim. Açıkla bana neyi, nerede, nasıl? Parmaklarda dedikleri gibi.


Sisteme gelince, test ettim, bir demo hesapta manuel olarak takas ettim, iyi sonuçlar veriyor, bu yüzden otomatikleştirmek istiyorum.

 
GSB, pako, teşekkürler, dikkatim dağıldı, bunu fark etmedim ...
 
denis77515 :

Tabii ki, bana ayrılan zaman için teşekkür ederim, ama benim için hala zor, sıkıcılık için özür dilerim. Açıkla bana neyi, nerede, nasıl? Parmaklarda dedikleri gibi.


Sisteme gelince, test ettim, bir demo hesapta manuel olarak takas ettim, iyi sonuçlar veriyor, bu yüzden otomatikleştirmek istiyorum.


Yalnızca hatalar varsa demoda nasıl test ettiniz? Sunulan kod takas edilemedi. Kodlara yorumlar eklendi. İşte bu - bilgi ve sıkı çalışma olmadan kendi başınıza çalışmaya devam edin… borsalarda ve özellikle Forex'te işlem yapamazsınız. Sonuç açık olacaktır. Geri adım atmadan, kesinlikle seçilen sisteme göre bir demo hesabı öğrenmenizi ve ticaret yapmanızı şiddetle tavsiye ederim. 2-3 ay sonucu gösterecek, daha sonra bu sistemin size özel ve genel olarak ticaret için uygun olup olmadığına karar vereceksiniz.
 
Teşekkürler, çok çalışalım!
 
Moderatörlere veya yöneticilere soru: Takma adımı değiştirebilir miyim? MQL5'e kaydolmaya çalıştım, ancak bu takma adın zaten oraya alınmış olduğu ortaya çıktı, farklı bir adla kaydolmak zorunda kaldım. Ve buradaki ve oradaki lakapların aynı olmasını istiyorum. Tabii ki, buraya tekrar kayıt olabilirim, ancak Kod Tabanına bir şeyler göndermeye çoktan başladım ve çalışmalarımın (ve gönderilerimin) yazarlığını sadece "yeniden adlandırarak" korumak istiyorum. Mümkün mü?
 
Spy :
Moderatörlere veya yöneticilere soru: Takma adımı değiştirebilir miyim? MQL5'e kaydolmaya çalıştım, ancak bu takma adın zaten oraya alınmış olduğu ortaya çıktı, farklı bir adla kaydolmak zorunda kaldım. Ve buradaki ve oradaki lakapların aynı olmasını istiyorum. Tabii ki, buraya tekrar kayıt olabilirim, ancak Kod Tabanına bir şeyler göndermeye çoktan başladım ve çalışmalarımın (ve gönderilerimin) yazarlığını sadece "yeniden adlandırarak" korumak istiyorum. Mümkün mü?

Rosh'a kişisel olarak yazın. Umarım onu bulursun. Sorunu bildir
 

Tamam teşekkürler.

 

Merhaba! MetaTrader'ın önceki sürümünde danışmanlarım olduğu için terminali güncelledim. Ondan sonra, 509'a geri döndüm. Böylece Uzman Danışmanlar, 60... yapısını "ziyaret ettikten", üzerinde yazıldığı terminal versiyonuna geri döndüler.

Soru şudur: "geri döndükten" sonra test cihazında işlem açmayı durduran ve artık kontrol edilemeyen Uzman Danışmanlarla ne yapmalı (test cihazındaki başlat düğmesi bir tıklamaya yanıt vermiyor)?