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

 

Bana yardım et lütfen! 2 dosya vardır: gösterge ve danışman. #include aracılığıyla bir göstergedeki bir işleve nasıl doğru şekilde başvurulur? iCustom çeşitli nedenlerle uygun değildir. İşte göstergede yazdıklarım:

 bool BuyTrue( double & переменная, int переменная) export
{
   //тело функции

   return ( true );
}   

Ve işte danışmanda ne var:

 #import "НазваниеИндикатора.ex4"
   bool BuyTrue( double & переменная, int переменная);
 if (BuyTrue(переменная, переменная))
Opn_B = true ;

Ancak bazı nedenlerden dolayı danışman çalışmıyor, test ederken gösterge fiyat tablosunda görünmüyor. Her şey doğru yazılmış mı ve bir hata varsa nerede?

 
AlexeyVik :

Tuta.


Ve buna sahip değilim. Ama dosya kesinlikle bir yerde, kayıtlı bilgiyi oradan alıyorum.


 

Lütfen mt4'ü derlememe yardım et

' FileClose ' hatası veriyor - 'void' tipinin ifadesi geçersiz TickToCVS~.mq4 84 12

Dosyalar:
 
abeiks :

Ve buna sahip değilim. Ama dosya kesinlikle bir yerde, kayıtlı bilgiyi oradan alıyorum.


Ekranımda menünün MetaEditor'dan olduğunu ve ekranınızın MT'den olduğunu görebilirsiniz.
 
AlexeyVik :

Bu EMPTY_VALUE

Nereye atladığını bulun.

Teşekkür ederim. Sorunu çözmeme yardım ettin. Yüklerken, göstergem sıfırdan değil (bilerek yaptım), sıfırdan başlayarak çubukları hesaplar, geçmiş verilerde değil, onay geçmişinde hesaplar. Şimdi zaman çerçevesini değiştirirken, çizelgeye eklerken ve terminali yeniden yüklerken, çubuk 0'daki arabellekleri sıfırlıyorum, sorun çözüldü.
 
AlexeyVik :
Ekranımda menünün MetaEditor'dan olduğunu ve ekranınızın MT'den olduğunu görebilirsiniz.
Aynen öyle! Teşekkür ederim!
 
Bu emir işe yararsa, açık bir pozisyonun fiyatı değil de geçmişteki bir emrin açılış fiyatı nasıl alınır? Ekli fonksiyonlarda, eğer sipariş çalıştıysa, o zaman bu sipariş sadece pozisyonlarda bulunabilir, bu nedenle çalışmaz. Ve pozisyonlarda emir değil, sadece açık pozisyonun fiyatı vardır.
 double GetPriceLastCloseOrder( string sy= "" , int mn=- 1 ) {
   datetime t= 0 ;
   int       i, k=OrdersHistoryTotal(); 
   double r= 0 ;

   if (sy== NULL ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) {
       if ((OrderSymbol()==sy || sy== "" ) && (mn< 0 || OrderMagicNumber()==mn)) {
         if (OrderType()> 1 && OrderType()< 6 ) {
           if (t<OrderCloseTime()) {
            t=OrderCloseTime();
            r=OrderOpenPrice();
          }
        }
      }
    }
  }
   return (r);
}  
 

herkese merhaba arkadaşlar bir soru; sıralamayı değiştiremiyorum. iki yönü var, modifikasyonun matematiğini iyi anlamıyorum, popüler olarak açıklayın

anladığım kadarıyla SL= IF SİPARİŞLERELEKT,Teklif-SİPARİŞSTOPLOS*POINT,DIGITS

ikinci yön. XBMS videosundan incelendi

test cihazındaki değişkenlerin değerlerini değiştirmeye çalışmadığım için eror 130 doğru stop loss değil ve işte burada

2016.06.28 21:42:23.402 2016.06.23 00:00 alım satım RSI girdileri: Lot=0.1; kayma=5; durma kaybı=10; kar al=30; RSIPeriyodu=7; büyü=1087;

Rakamlardan çarpmalar ve yanlış SL durumunda bir fonksiyon olmasına rağmen


dış çift Lot = 0.1;

dış int kayma = 10;

harici int StopLoss =10;

harici int TakeProfit=30;

extern int RSIPPeriyodu = 7;

harici int Magic=1087;

çift MaRSI;


intTP,SL;

bool tfu;


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

//| uzman başlatma işlevi |

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

int OnInit()

{

if(Rakamlar == 3||Rakamlar == 5)

{

kayma *= 10;

Kâr Al *= 10;

StopLoss *= 10;

}

dönüş(INIT_SUCCESSED);

}

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

//| Uzman başlatmasızlaştırma işlevi |

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

geçersiz OnDeinit(const int nedeni)

{


}

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

//| Uzman onay işlevi |

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

geçersiz OnTick()

{

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

//satış açmak

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

MaRSI=iRSI(Symbol(),0, RSIPerod,PRICE_CLOSE,1);

if(CountTrades() <= 0&&MaRSI<=30 )

{

if( SendOrder(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"test",Magic,0,Yeşil))

{ int bilet = OrderTicket();

SL = NormalizeDouble( Ask - StopLoss*Point,Rakamlar);

TP = NormalizeDouble( Ask + TakeProfit*Puan,Rakamlar);

ModifyOrder(bilet,OrderOpenPrice(),SL,TP,0,Siyah);

}

}// if(CountTrades <= 0&&MaRSI>=70 )

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

// satın almayı aç

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


}//ONTICK


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

//+sipariş sayacı

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


int CountTrades()

{

int sayı = 0;

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

{

if( OrderSelect(i,SELECT_BY_POS,MODE_TRADES))

{

if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)//sipariş bizim ise

say++;//sayacını artır

}//dizine göre sırayı seçin

}//for.i==ilk herhangi bir siparişe.

return(count);//siparişlerin sayısını döndürür

}//işlev

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

//hata işlemeli sipariş verme işlevi

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

int SendOrder( string sembolü,int cmd,çift hacim,çift fiyat,int kayma,çift stoploss,

çift kazanç,dize yorumu,int magic=0,datetime son kullanma=0,color arrow_color=CLR_NONE)

{

int hata = GetLastError();

hata=0;

bool exit_cikl = yanlış;

int bilet = -1;

int Yeniden Dene = 10;//sipariş verme deneme sayısı

int cnt = 0; // sayacı yeniden dene

if(cmd == OP_BUY || cmd == OP_SEL)

{

while(!exit_cycle)

{

bilet = OrderSend(sembol, cmd, hacim, fiyat, kayma, stoploss,takeprofit,yorum,büyü, son kullanma,ok_renk);

err= GetLastError();

geçiş(hata)

{

durum ERR_NO_ERROR:

çıkış_döngüsü=doğru;

kırmak;

durum ERR_SERVER_BUSY:

durum ERR_NO_CONNECTION:

durum ERR_INVALID_PRICE:

durum ERR_OFF_QUOTES:

durum ERR_BROKER_BUSY:

ERR_TRADE_CONTEXT_BUSY vakası:

cnt++;

kırmak;

durum ERR_PRICE_CHANGED:

durum ERR_REQUOTE:

Yeniler();

devam etmek;

varsayılan:

çıkış_döngüsü=doğru;

kırmak;

}//anahtar anahtarı anahtarı(err)

if(cnt > tekrar dene)

çıkış_döngüsü=doğru;

if(!exit_cikl)

{

uyku(1000);

Yeniler();

}//eğer döngüden çıkmazsak if(!exit_cikl)

başka

{

if(hata != ERR_NO_ERROR)

{

Print("Hata: " + IntegerToString(err));

}//eğer bazı hatalar devam ediyorsa if(err != ERR_NO_ERROR)

}//AKSİ DURUMDA

if(err==ERR_NO_ERROR)

{

if( OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES)==true)

bilet iadesi);

}// if(err==ERR_NO_ERROR)

Print(" + IntegerToString(cnt) +"denemelerinden" sonra sıralama açılırken hata oluştu);

dönüş(-1);

}//döngü sırasında

}//sipariş türü al veya sat ise

bilet iadesi);

}//SendOrder işlevi


//------------------------------------------------ -------------------------------------------------- -----------

// sipariş fonksiyonunu değiştir

//------------------------------------------------ -------------------------------------------------- ----------

bool ModifyOrder(int bilet, çift fiyat, çift stoploss, çift kâr alma, tarih saat sona erme, renkli ok_renk)

{

if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES))

{

fiyat = NormalizeDouble(fiyat, Rakamlar);

stoploss = NormalizeDouble(stoploss,Rakamlar);

kar al = NormalizeDouble(kâr al,Rakamlar);

CheckValidStop(Symbol(),price,stoploss);//minimum durağı değiştirme işlevi

int hata = GetLastError();

hata = 0;

int Yeniden Dene = 10;

int cnt = 0;

bool exit_cikl = yanlış;

boolsonuç;

while(!exit_cycle)

{

sonuç = OrderModify(bilet, fiyat, stoploss, kar al, vade sonu, ok_renk);

hata = GetLastError();

if(sonuç == doğru)

{

Print("Sipariş # "+ IntegerToString(bilet), "başarıyla değiştirildi");

dönüş(doğru);

}

geçiş(hata)

{

durum ERR_NO_ERROR:

çıkış_döngüsü=doğru;

kırmak;

durum ERR_SERVER_BUSY:

durum ERR_NO_CONNECTION:

durum ERR_INVALID_PRICE:

durum ERR_OFF_QUOTES:

durum ERR_BROKER_BUSY:

ERR_TRADE_CONTEXT_BUSY vakası:

cnt++;

kırmak;

ERR_PRICE_CHANGED vakası:

durum ERR_REQUOTE:

Yeniler();

devam etmek;

varsayılan:

çıkış_döngüsü=doğru;

kırmak;

}//anahtar anahtarı anahtarı(err)

}//while(!exit_cikl)

if ( err != ERR_NO_ERROR)

{

Print(" Sıra # değiştirilirken hata oluştu " + IntegerToString(ticket));

Print("Hata kodu: " + IntegerToString(err));

}

}//if(OrderSelect(bilet,SELECT_BY_TICKET,MODE_TRADES))

başka

{

Print("Sipariş seçilemedi, bilet = " + IntegerToString(ticket));

dönüş(yanlış);

}//bir şey yanlışsa

dönüş(doğru);

}//işlevi değiştir

//------------------------------------------------ -------------------------------------------------- --

//ChtckValidStop

//------------------------------------------------ --------------------------------------------------

void CheckValidStop(dize sembolü, çift fiyat, çift ve sl)

{

if(sl==0)

dönüş;

double min_stop_server = MarketInfo(sembol,MODE_STOPLEVEL)*MarketInfo(sembol,MODE_POINT);

if(MathAbs(fiyat-sl) <= min_stop_server)

{

if(fiyat>sl)

sl = fiyat - min_stop_server;

başka sl = sl + min_stop_server;

}/// if(MathAbs(fiyat-sl) <= min_stop_server)

sl = NormalizeDouble(sl,MarketInfo(symbol,MODE_DIGITS));

}//işlev


 

LÜTFEN BANA SÖYLE!!!

İşlem geçmişinde iki emir vardır: 1) Tıklamasız SAT 415 STOPLOSS 1.1000 lot 0.01 2) Tıklamasız SAT 418 DURDURMA 1.1000 lot 0.02

Değişkenleri atamam gerekiyor: X=#tick, Y=STOPLOSS ve B=lot, eğer Satış fiyatı SATIŞ emrinin DURDURMA'sına eşitse. Değişkenlere önce birinci sırada, sonra ikinci sırada değerler nasıl atanır. Bana göre her zaman ilkine değer biçer.

 
m8akca :

LÜTFEN BANA SÖYLE!!!

İşlem geçmişinde iki emir vardır: 1) Tıklamasız SAT 415 STOPLOSS 1.1000 lot 0.01 2) Tıklamasız SAT 418 DURDURMA 1.1000 lot 0.02

Değişkenleri atamam gerekiyor: X=#tick, Y=STOPLOSS ve B=lot, eğer Satış fiyatı SATIŞ emrinin DURDURMA'sına eşitse. Değişkenlere önce birinci sırada, sonra ikinci sırada değerler nasıl atanır. Bana göre her zaman ilkine değer biçer.

Burada zaten bir şeyler yazanlara yardım ediyorlar, ancak olması gerektiği gibi çalışmıyor. Lütfen kodunuzu sağlayın, böylece burada bulunanlar neyin yanlış olduğunu görebilir ve yardımcı olabilir.

Ve sipariş üzerine yazılmak istiyorsanız, o zaman bu orada .

Neden: