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

 

Sevgili uzmanlar, lütfen birisinin basit bir Uzman Danışman yapmak için bu kodu değiştirmesine yardım edin. Özü basittir - mevcut fiyatta belirtilen duraklarla Satış ve Bui 2 pozisyon açın. Ardından, alımlardan biri veya her ikisi birden tetiklendiğinde, yeni pozisyonlar açıyoruz vb. İşin özü basit gibi görünüyor ama yine de çalışmıyor.Şimdiden teşekkürler!

//+------------------------------------------------------------------+
//| 2DiffOrders.mq4 |
//| Copyright © 2008, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
extern double lots=0.01;
extern int SL_in_pips;
extern int TP_in_pips;
int x2;
int init()
{
  if(SL_in_pips<=MarketInfo(Symbol(),MODE_STOPLEVEL) && SL_in_pips>0)
{
SL_in_pips=MarketInfo(Symbol(),MODE_STOPLEVEL);
Alert("Stoploss установлен слишком близко к цене открытия. Должен быть минимум ",MarketInfo(Symbol(),MODE_STOPLEVEL),"pt.");
}
if(TP_in_pips<=MarketInfo(Symbol(),MODE_STOPLEVEL) && TP_in_pips>0)
{
TP_in_pips=MarketInfo(Symbol(),MODE_STOPLEVEL);
Alert("Takeprofit установлен слишком близко к цене открытия. Должен быть минимум ",MarketInfo(Symbol(),MODE_STOPLEVEL),"pt.");
}
x2=1; 
while(x2!=0)
{
if(OrderSend(Symbol(),0,lots,Ask,2,Bid-15*Point,Bid+15*Point,0)!=-1)
{
Alert("Ордер типа BUY успешно открыт");
OrderSend(Symbol(),1,lots,Bid,2,Ask+15*Point,Ask-15*Point,0);
x2=GetLastError();
if(x2==0)
Alert("Ордер типа SELL успешно открыт");
if(x2!=0)
Alert("Ордер типа SELL не открыт. Ошибка №: ",x2);
}else
{
x2=GetLastError();
if(x2!=0)
Alert("Ордер типа BUY не открыт. Ошибка №: ",x2);
}
}
//----
return(0);
 

Dosyalar:
ala.mq4  3 kb
 
Reshetov >> :

Sadece tam olarak görünüyor, ancak makine gösteriminde son bit farklı değerler alabilir. Onlar. 2.9999, 3 veya 3.00000001


Bu tür yanlış anlamalardan kurtulmak için MQL, NormalizeDouble() işlevine sahiptir.

evet, NormalizeDouble() yardımcı olur, teşekkürler.

ama yine de, basit bir bölme gibi bunun nasıl mümkün olduğu açık değil. ve eğer 0,5 veya 0,9 veya hatta 0,31 tüm kurallar 0,1'e bölünürse.

ve burada açıkça 2.9 çıkıyor, net değil ... hesap makinesi daha doğru çözüyor :-)

yardımları için Reshetov ve splxgf'e teşekkürler.

 
mukata >> :


ama yine de, basit bir bölme gibi bunun nasıl mümkün olduğu açık değil. ve eğer 0,5 veya 0,9 veya hatta 0,31 tüm kurallar 0,1'e bölünürse.

ve burada açıkça 2.9 çıkıyor, net değil ... hesap makinesi daha doğru çözüyor :-)


Hesap makineleri, sonuçları yuvarlamak için yerleşik işlevlere sahiptir. Ayrıca karar verirler çünkü kayan noktalı sayıları hesaplamak için aynı matematik yardımcı işlemcisini kullanırlar.

 

Merhaba!

Söyle bana, lütfen, kim yapabilir!

Kendim nasıl yapacağımı anlamıyorum.

Görev:

EA, günde bir kez 1-2 sipariş verir.

Değişkenin başlangıç değeri manuel olarak ayarlanır ve 1 ile 10 arasında bir değer alabilir.

Önceden ayarlanmış değişkeni 1'lik artışlarla - 10 değerine değiştirmek gerekir.

TP o gün yürütülmezse, danışmanın her iş gününde yalnızca 1'e kadar.

TP - değişkeni yürütüldüğünde, - 1 değeri döndürülür.

SL hesaplaması uygun değildir, çünkü bir veya iki tane olabilir ve değer günde sadece bir kez değiştirilebilir.

Onlar.

Değişken = 1

1. Gün SL - değişken =2

2. Gün SL - değişken =3

3. Gün SL - değişken =4

4. Gün TP - değişken =1

5. Gün SL - değişken =2

... vb.

Yardım!

Teşekkür ederim.

 
Enter писал(а) >>

Sevgili uzmanlar, lütfen birisinin basit bir Uzman Danışman yapmak için bu kodu değiştirmesine yardım edin. Özü basittir - mevcut fiyatta belirtilen duraklarla 2 Satış ve Bui pozisyonu açın. Ardından, alımlardan biri veya her ikisi birden tetiklendiğinde, yeni pozisyonlar açıyoruz vb. İşin özü basit gibi görünüyor ama yine de çalışmıyor.Şimdiden teşekkürler!

Eh, Expert Advisor'ın çalışması için Expert Advisor'ın "etinin" yine de başlatma fonksiyonuna yerleştirilmiş olması gerekir...
 

Uzmanlar, lütfen yardım edin.

Bir periyotluk momentumu hesaplayan ve onu büyük bir periyotla bütünleştiren ve ardından bunu bir gösterge olarak gösteren bir kod var.

Ortaya çıkan eğrinin ortalamasını bulan ve bunu bir gösterge olarak görüntüleyen belirli bir periyoda sahip bir gösterge yazmanız gerekir.

Kodu ekliyorum:

#özellik göstergesi_separate_window
#özellik göstergesi_tamponları 1
#özellik göstergesi_color1 DodgerBlue
#özellik göstergesi_width1 2

//------- Göstergenin harici parametreleri ------------------------------------ -- ---+
harici int MTM_Period = 1;
//harici int MTM_Integr_Period = 1000;

//harici int Applied_Price = 0; // Kullanılan fiyat:
// 0 - PRICE_CLOSE
// 1 - PRICE_OPEN
// 2 - PRICE_HIGH
// 3 - PRICE_LOW
// 4 - PRICE_MEDIAN
// 5 - PRICE_TYPICAL
// 6 - PRICE_WEIGHTED
harici int NumberOfBars = 1000; // Hesaplanacak çubuk sayısı (0-tümü)

//------- Gösterge arabellekleri --------------------------------- ------ ------+
çift buf0[];

//+------------------------------------------- ------------------------------+
//| özel gösterge başlatma işlevi |
//+------------------------------------------- ------------------------------+
geçersiz init() {
SetIndexBuffer(0, buf0);
SetIndexEmptyValue(0, 0);
SetIndexLabel(0, "i-mtm_integr");
SetIndexStyle(0, DRAW_LINE);
}

//+------------------------------------------- ------------------------------+
//| özel gösterge sıfırlama işlevi |
//+------------------------------------------- ------------------------------+
geçersiz tanım() {
Yorum("");
}

//+------------------------------------------- ------------------------------+
//| özel gösterge yineleme işlevi |
//+------------------------------------------- ------------------------------+
geçersiz başlangıç() {
int LoopBegin, i,j, per=3;
çift mtm, mtmsum;

if (NumberOfBars==0) LoopBegin=Bars-1;
başka LoopBegin=NumberOfBars;
LoopBegin=MathMin(LoopBegin, Çubuklar-1);

for (i=LoopBegin; i>=0; i--) {
mtm=Kapat[i]-Kapat[MTM_Period+i];
mtmsum=mtmsum+mtm;
buf0[i]=mtmsum;
}
/* for (i=LoopBegin-per;i>=per;i--){
mtm=Kapat[i]-Kapat[MTM_Period+i];
mtmsum[i]=0+mtm;
for (j=per;j<=0;j--){
mtmsum[i]=0+mtmsum[i+j];
mtmsum[i]=mtmsum[i]/başına;
buf0[i]=mtmsum[i];
}
}*/
}
//+------------------------------------------- ------------------------------+

 
VNG писал(а) >>

Uzmanlar, lütfen yardım edin.

Bir periyotluk momentumu hesaplayan ve onu büyük bir periyotla bütünleştiren ve ardından bunu bir gösterge olarak gösteren bir kod var.

Ortaya çıkan eğrinin ortalamasını bulan ve bunu bir gösterge olarak görüntüleyen belirli bir periyoda sahip bir gösterge yazmanız gerekir.

 #property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 DodgerBlue
#property indicator_color2 Red
#property indicator_width1 2

//------- Внешние параметры индикатора ----------------------------------------+
extern int MTM_Period = 1 ; 
//extern int MTM_Integr_Period = 1000; 

//extern int Applied_Price = 0; // Используемая цена:
// 0 - PRICE_CLOSE
// 1 - PRICE_OPEN
// 2 - PRICE_HIGH
// 3 - PRICE_LOW
// 4 - PRICE_MEDIAN
// 5 - PRICE_TYPICAL
// 6 - PRICE_WEIGHTED
extern int NumberOfBars = 1000 ; // Количество баров обсчёта (0-все)
extern int MA_Period = 3 ;
extern int MA_Mode = 0 ;

//------- Буферы индикатора ---------------------------------------------------+
double buf0 [ ] ;
double MA [ ] ;
//+----------------------------------------------------------------------------+
//| Custom indicator initialization function |
//+----------------------------------------------------------------------------+
void init ( ) {
   SetIndexBuffer ( 0 , buf0 ) ;
   SetIndexEmptyValue ( 0 , 0 ) ;
   SetIndexLabel ( 0 , "i-mtm_integr" ) ;
   SetIndexStyle ( 0 , DRAW_LINE ) ;
   SetIndexBuffer ( 1 , MA ) ;
   SetIndexLabel ( 1 , "MA" ) ;
   SetIndexStyle ( 1 , DRAW_LINE ) ;

}

//+----------------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+----------------------------------------------------------------------------+
void deinit ( ) {
Comment ( "" ) ;
}

//+----------------------------------------------------------------------------+
//| Custom indicator iteration function |
//+----------------------------------------------------------------------------+
void start ( ) {
   int LoopBegin , i , j , per = 3 ;
   double mtm , mtmsum ;

   if ( NumberOfBars = = 0 ) LoopBegin = Bars - 1 ;
   else LoopBegin = NumberOfBars ;
  LoopBegin = MathMin ( LoopBegin , Bars - 1 ) ;

   for ( i = LoopBegin ; i > = 0 ; i - - ) {
    mtm = Close [ i ] - Close [ MTM_Period + i ] ;
    mtmsum = mtmsum + mtm ;
    buf0 [ i ] = mtmsum ;
   }
   for ( i = LoopBegin - per ; i > = per ; i - - ) {
     MA [ i ] = iMAOnArray ( buf0 , 0 , MA_Period , 0 , MA_Mode , i ) ;
   }
}
//+----------------------------------------------------------------------------+
Belki bu seçenek işe yarar. Kodu kontrol etmedim, tarayıcıya yazdım
 
Reshetov >> :

Sadece tam olarak görünüyor, ancak makine gösteriminde son bit farklı değerler alabilir. Onlar. 2.9999, 3 veya 3.00000001

Bu tür yanlış anlamalardan kurtulmak için MQL, NormalizeDouble() işlevine sahiptir.


NormalizeDouble() işlevi neden tüm Ask, Bid, Low vb. değerler için varsayılan olarak çalışmıyor?

Herkes bununla karşılaştı, sonra herkes "manuel" düzeltmek zorunda.. MT'nin kendisinin doğurduğunu okuyamaması garip.

 
Silen >> :

Teşekkürler, verilerin start() içinde bulunacağına dair bir garanti var mı?

emin olmak için RefreshRates() kullanmayı deneyebilirsiniz - standart Metaeditor yardımındaki örneklere bakın

 

Expert Advisor optimizasyonunda "Rapor olarak kaydet" seçeneği var ama Internet Explorer'da "Giriş Parametreleri" görünmüyor,

html koduna bakılırsa, içinde mevcutlar. Genel olarak, bu parametreler uğruna optimizasyon başlatıldı.

Onları kaşifte nasıl göreceğini bilen var mı?


(ayrı bir komutla bir metin dosyasına kopyalamak hala mümkündür, ancak IE'de görmek tercih edilir)