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

 

iyi günler/geceler

İşe yaramayacak kadar ilkel bir şekilde anlaşmayı tersine çevirmeye çalışıyorum (EA'daki hesaplama kenelerle yapılıyor):

if(CalculateCurrentOrders(Symbol())>0 && Close[1]<LowLevel) // alım emri olup olmadığını belirler && mum düşük seviyenin altında kapanırsa

{

CheckForClose(); // siparişi kapat

OpenSell(); // satış emri açma

dönüş;

}

Söyle bana neyi yanlış yapıyorum? Bu boşluğu doldurmaya yardımcı olacak bağlantılar için de minnettar olurum.

 

dzhini :

Anlaşmayı o kadar ilkel bir şekilde tersine çevirmeye çalışıyorum ki bu işe yaramıyor (EA'daki hesaplama kenelere göre gidiyor):

if( CalculateCurrentOrders(Symbol())> 0 && Close[1]<LowLevel) // satın alma emri olup olmadığını belirler && mum düşük seviyenin altında kapanırsa


bu fonksiyonda muhtemelen tüm siparişleri sayarsınız. ama Bai'ye ihtiyacın var
 

Time1 ve Time2 arasında kaç dakika olduğu nasıl belirlenir?

 datetime Time_1     = D'2011.01.12 13:30' ;
datetime Time_2     = D'2011.01.05 10:30' ; 

минут = Time_1- Time_2
 
sergeev :
bu fonksiyonda muhtemelen tüm siparişleri sayarsınız. ama Bai'ye ihtiyacın var

Bu standart işlevdir:

int CalculateCurrentOrders(dize sembolü)
{
int satın alır = 0, satar = 0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==yanlış) ara;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) satın alır++;
if(OrderType()==OP_SEL) satıyor++;
}
}

if(satın alır>0) iade(satın alır);
başka iade(-satış);

}

>0 ise, bunlar alış emirleridir , <0 ise satış emirleridir)))

 
Eliza :

Time1 ve Time2 arasında kaç dakika olduğu nasıl belirlenir?

fark saniye sayısını döndürür.

60'a bölün. dakika sayısını alın.

 
Ters anlaşma. Danışmanın yapısı değiştirildi - işlevleri kaldırıldı. Belirli koşullar altında bir mum üzerinde nasıl kapatılır ve açılır.

dış çift TP = 70; //kar almak
dış çift SL = 0; //kaybı durdurmak
harici çift Parti = 0.1;

çift HighLevel;
çift LowLevel;
intresBuy=0;
intresSell=0;


//+------------------------------------------- --------------------+
//| uzman başlatma işlevi |
//+------------------------------------------- --------------------+
int init()
{
HighLevel=Yüksek[1];
LowLevel=Düşük[1];
dönüş;
}

//+------------------------------------------- --------------------+
//| uzman işlevi |
//+------------------------------------------- --------------------+

geçersiz başlangıç()
{

if(Bars<100 && IsTradeAllowed()==false) return;


if(resBuy==0 && resSell==0 && CheckBreak()==-1)
{
resSell=SiparişGönder(Symbol(),OP_SELL,Lot,Teklif,2,0,Teklif -TP,"",MAGICMA,0,Kırmızı);
HighLevel=DüşükSeviye;
LowLevel=Kapat[1];
dönüş;
}

if(resBuy==0 && resSell==0 && CheckBreak()==1)
{
resBuy=SiparişGönder(Symbol(),OP_BUY,Lot,Sor,2,0,Sor + TP,"",MAGICMA,0,Mavi);
DüşükSeviye=YüksekSeviye;
HighLevel=Kapat[1];
dönüş;
}

if(resBuy!=0 && resSell==0 && Kapat[1]<LowLevel) //----------------------------- -------- bu kısım ilgi çekicidir: aynı çubukta kapanma ve açılma
{
bool closeBuy=SiparişKapat(resBuy, Lot, Bid, 2, Blue);
// while(!IsTradeAllowed()) Sleep(100);
resSell=SiparişGönder(Symbol(),OP_SELL,Lot,Teklif,2,0,Teklif -TP,"",MAGICMA,0,Kırmızı);
HighLevel=DüşükSeviye;
LowLevel=Kapat[1];
dönüş;
}

if(resSell!=0 && resBuy==0 && Kapat[1]>YüksekSeviye) //-------------------------------- -------- bu kısım ilgi çekicidir: aynı çubukta kapanma ve açılma
{
bool closeSell=SiparişKapat(resSell, Lot, Ask, 0.0002, Red);
// while(!IsTradeAllowed()) Sleep(100);
resBuy=SiparişGönder(Symbol(),OP_BUY,Lot,Sor,2,0,Sor + TP,"",MAGICMA,0,Mavi);
DüşükSeviye=YüksekSeviye;
HighLevel=Kapat[1];
dönüş;
}

}

//------------------------------------------------ ----------------- Düşük ve Yüksek molayı kontrol et (Func)

çift CheckBreak()
{
çift mum=Aç[1]-Kapat[1];

if(candle>0 && Low[1]<LowLevel) return(-1);
if(mum<0 && Yüksek[1]>YüksekSeviye) dönüş(1);
}
 
sergeev :

fark saniye sayısını döndürür.

60'a bölün. dakika sayısını alın.

Benim için sadece 1971.03.04 12:00 tarihini gösteriyor, belki dönüştürülmesi gerekiyor?

 extern datetime Time_1     = D'2011.01.12 13:30' ; 
extern datetime Time_2     = D'2011.01.05 10:30' ; 

bool    Commentari      = true;

int start()
  {

if (Commentari){
 Comment (
         "\n Дата  =  " + TimeToStr((Time_1-Time_2)/ 60 ), " минут" ,
      
         "\n==============================" );}
   return ( 0 );
  }
 
Eliza :

Sadece benim için tarihi gösteriyor, belki dönüştürülmesi gerekiyor?

ilk - neden 60 ile çarpıyorsun

ikincisi - ekranda dakika sayısını 00:15 gibi bir süre olarak görüntülemek istiyorsanız,
60 ile bölmeye veya çarpmaya gerek yok.

 
sergeev :

ilk - neden 60 ile çarpıyorsun

ikincisi - ekranda dakika sayısını 00:15 gibi bir süre olarak görüntülemek istiyorsanız,
60 ile bölmeye veya çarpmaya gerek yok.

Evet bölme için düzelttim ama yıl çıkıyor 1970.01.01 02:51

Ekran için buna ihtiyacım yok, sadece bu süre için tarihsiz dakika sayısını bulmak istedim ....

Bölmeseniz bile, yine de tarihi görüntüler, yoksa yine de işlevin iptal edildiği tarihi çıkarmam gerekir mi?

  • tarihsaat bir tarih ve saattir, 1 Ocak 1970'de 0000 saatten beri geçen saniye sayısını içeren işaretsiz bir tamsayıdır.
  •  extern datetime Time_1     = D'2011.01.12 13:30' ; 
    extern datetime Time_2     = D'2011.01.05 10:30' ; 
    
    datetime me_2     = D'1970.01.01 00:00' ; 
    
    bool    Commentari      = true;
    
    int start()
      {
    
    if (Commentari){
     Comment (
             "\n Дата  =  " + TimeToStr(me_2-(Time_1-Time_2)), " минут" ,
          
             "\n==============================" );}
       return ( 0 );
      }

  • 1970.01.01 02:51 tarihini çıkarırsam geçersiz zamanı atıyor, sadece bu süreden dakika sayısını almam gerekiyor, örneğin bu süre içinde 25000 dakika varsa, o zaman buna ihtiyacım var şekil 25000 ... bunun gibi bir şey (
  • yoksa dil µl ile elde etmek mümkün değil mi?
 

Yalnızca dakika sayısına ihtiyacınız varsa, TimeToStr kullanmanız için kesinlikle hiçbir neden yoktur.

Zaman sıradan bir int sayısıdır

Veya bir seçenek olarak - TimeToStr'ı yalnızca TIME_MINUTE bayrağıyla kullanın