Merhaba! Lütfen MT4'te bir fonksiyon yazarken yardım edin. Hesap bakiyesini biliyorum (Hesap Bakiyesi), kaç tane işlem açacağımı biliyorum (örneğin, 9) Riski biliyorum (örneğin, Hesap Bakiyesinin %3'ü), eğer varsa ilk işlemin lotunu hesaplamam gerekiyor. sonraki her lot ikiye katlanacak ve tüm anlaşmalar birer birer üst üste gelecek.
buraya yazıyorum çünkü mq4'te kimse yok gibi görünüyor.
Lütfen bana neyi yanlış yaptığımı söyle? 2. seçenek çalışmıyor.
double A[][ 10 ];
int renge_A_one= 0 ; // =ArrayRange(A, 0); // Размер первого измерения (число строк)int renge_A_two= 0 ; // =ArrayRange(A, 1); // Размер второго измерения (число столбцов)double B[][ 10 ];
int renge_B_one= 0 ; // =ArrayRange(A, 0); // Размер первого измерения (число строк)int renge_B_two= 0 ; // =ArrayRange(A, 1); // Размер второго измерения (число столбцов)int count_B= 0 ;
//+------------------------------------------------------------------+//| Вариант 1. Копируем строки "А" в "В" без изменений |//+------------------------------------------------------------------+void Fun_1()
{
renge_A_one== ArrayRange (A, 0 ); // Выясняем Размер первого измерения (число строк)
renge_A_two== ArrayRange (A, 1 ); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"for ( int i= 0 ; i<range_A_one; i++) // Перебираем массив A[][10] по ПЕРВОМУ измерению.
{
count_B++;
ArrayResize (B, count_B);
for ( int j= 0 ; j<renge_A_two; j++) // Перебираем массив A[][10] по ВТОРОМУ измерению.
B[i][j]=A[i][j];
}
renge_B_one== ArrayRange (B, 0 ); // Выясняем Размер первого измерения (число строк)
renge_B_two== ArrayRange (B, 1 ); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"
}
// Результат: "А" скопирован в "В" без изменений // renge_A_one = renge_В_one// renge_A_two = renge_В_two//+------------------------------------------------------------------+//| Вариант 2. Копируем строки "А" в "В" при условии |//+------------------------------------------------------------------+void Fun_2()
{
renge_A_one== ArrayRange (A, 0 ); // Выясняем Размер первого измерения (число строк)
renge_A_two== ArrayRange (A, 1 ); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"for ( int i= 0 ; i<range_A_one; i++) // Перебираем массив A[][10] по ПЕРВОМУ измерению.
{
if (A[i][ 3 ]> 0 )
{
count_B++;
ArrayResize (B, count_B);
for ( int j= 0 ; j<renge_A_two; j++) // Перебираем массив A[][10] по ВТОРОМУ измерению.
B[i][j]=A[i][j];
}
}
renge_B_one== ArrayRange (B, 0 ); // Выясняем Размер первого измерения (число строк)
renge_B_two== ArrayRange (B, 1 ); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"
}
// Результат: часть строк "В" с соответствующими значениями// часть строк "В" заполнена "0" полностью, при том, что в "А" заполнены ЗНАЧЕНИЯМИ// renge_A_one > renge_В_one// renge_A_two = renge_В_two
Arseniy Barudkin : Merhaba! Lütfen MT4'te bir fonksiyon yazarken yardım edin. Hesap bakiyesini biliyorum (Hesap Bakiyesi), kaç tane işlem açacağımı biliyorum (örneğin, 9) Riski biliyorum (örneğin, Hesap Bakiyesinin %3'ü), eğer varsa ilk işlemin lotunu hesaplamam gerekiyor. sonraki her lot ikiye katlanacak ve tüm anlaşmalar birer birer üst üste gelecek.
İşte olanlar. Lütfen bana neyin yanlış olduğunu söyle. Şimdiden teşekkürler!
buraya yazıyorum çünkü mq4'te kimse yok gibi görünüyor.
Lütfen bana neyi yanlış yaptığımı söyle? 2. seçenek çalışmıyor.
double A[][ 10 ];
int renge_A_one= 0 ; // =ArrayRange(A, 0); // Размер первого измерения (число строк)int renge_A_two= 0 ; // =ArrayRange(A, 1); // Размер второго измерения (число столбцов)double B[][ 10 ];
int renge_B_one= 0 ; // =ArrayRange(A, 0); // Размер первого измерения (число строк)int renge_B_two= 0 ; // =ArrayRange(A, 1); // Размер второго измерения (число столбцов)int count_B= 0 ;
//+------------------------------------------------------------------+//| Вариант 1. Копируем строки "А" в "В" без изменений |//+------------------------------------------------------------------+void Fun_1()
{
renge_A_one ==ArrayRange (A, 0 );// Выясняем Размер первого измерения (число строк)renge_A_two ==ArrayRange (A, 1 );// Выясняем Размер второго измерения (число столбцов). "На всякий случай"for ( int i= 0 ; i<range_A_one; i++) // Перебираем массив A[][10] по ПЕРВОМУ измерению.
{
count_B++;
ArrayResize (B, count_B);
for ( int j= 0 ; j<renge_A_two; j++) // Перебираем массив A[][10] по ВТОРОМУ измерению.
B[i][j]=A[i][j];
}
renge_B_one ==ArrayRange (B, 0 ); // Выясняем Размер первого измерения (число строк)
renge_B_two ==ArrayRange (B, 1 ); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"
}
// Результат: "А" скопирован в "В" без изменений // renge_A_one = renge_В_one// renge_A_two = renge_В_two//+------------------------------------------------------------------+//| Вариант 2. Копируем строки "А" в "В" при условии |//+------------------------------------------------------------------+void Fun_2()
{
renge_A_one ==ArrayRange (A, 0 ); // Выясняем Размер первого измерения (число строк)
renge_A_two ==ArrayRange (A, 1 ); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"for ( int i= 0 ; i<range_A_one; i++) // Перебираем массив A[][10] по ПЕРВОМУ измерению.
{
if (A[i][ 3 ]> 0 )
{
count_B++;
ArrayResize (B, count_B);
for ( int j= 0 ; j<renge_A_two; j++) // Перебираем массив A[][10] по ВТОРОМУ измерению.
B[i][j]=A[i][j];
}
}
r enge_B_one ==ArrayRange (B, 0 ); // Выясняем Размер первого измерения (число строк)
renge_B_two ==ArrayRange (B, 1 ); // Выясняем Размер второго измерения (число столбцов). "На всякий случай"
}
// Результат: часть строк "В" с соответствующими значениями// часть строк "В" заполнена "0" полностью, при том, что в "А" заполнены ЗНАЧЕНИЯМИ// renge_A_one > renge_В_one// renge_A_two = renge_В_two
Vurgulanan: Bir atama - "=" olmalı ve bir karşılaştırmanız var - "==".
Merhaba ! Mt4'te robot yazmayı öğreniyorum, ikili seçeneklerle başlamaya karar verdim. En basit Uzman Danışmanı yazıyorum ve derleyici başa çıkamadığım bir sürü uyarı veriyor ( Yardım: "MQL4 guruları hakkında" =)))))) Şimdiden teşekkürler!)
İşte danışman kodu.
//+------------------------------------------- --------------------+ //| Bolinger_Bands_traider.mq4 | //| Telif hakkı 2017, Penrov Nikolay | //| vk.com/buzamonolit | //+------------------------------------------- --------------------+ #özellik telif hakkı "Telif hakkı 2017, Petrov Nikolay" #özellik bağlantısı "vk.com/buzamonolit" #özellik sürümü "1.00" #mülkiyet katı //+------------------------------------------- --------------------+ //| uzman başlatma işlevi | //+------------------------------------------- --------------------+ extern int Bolinger_Bands = 20; // Bollinger Bantlarının Periyodu dış çift Delta = 0.0003; // Bir siparişin hangi mesafede açılacağı
dize Symb; // Finansın adı. alet int Toplam; // Sipariş sayısı
int Initialize_Objects(int Win) // Kullanıcı Fonksiyonu { // ..nesne oluşturma ObjectCreate("Obj_Label",OBJ_LABEL, Win, 0,0); // Bir nesne oluştur ObjectSet("Obj_Label", OBJPROP_CORNER, 0); // Köşeye yasla ObjectSet("Obj_Label", OBJPROP_XDISTANCE, 13); // X koordinatı eğer (Kazanç==0) ObjectSet("Obj_Label",OBJPROP_YDISTANCE, 15);// Y koordinatı başka ObjectSet("Obj_Label",OBJPROP_YDISTANCE,15);// Y koordinatı
ObjectCreate("Obj_Label2",OBJ_LABEL, Kazan, 0,0); // Bir nesne oluştur ObjectSet("Obj_Label2", OBJPROP_CORNER, 0); // Köşeye yasla ObjectSet("Obj_Label2", OBJPROP_XDISTANCE, 13); // X koordinatı eğer (Kazanç==0) ObjectSet("Obj_Label2",OBJPROP_YDISTANCE, 35);// Y koordinatı başka ObjectSet("Obj_Label2",OBJPROP_YDISTANCE, 35);// Y koordinatı
ObjectCreate("Obj_Label3",OBJ_LABEL, Kazan, 0,0); // Bir nesne oluştur ObjectSet("Obj_Label3", OBJPROP_CORNER, 0); // Köşeye yasla ObjectSet("Obj_Label3", OBJPROP_XDISTANCE, 13); // X koordinatı eğer (Kazanç==0) ObjectSet("Obj_Label3",OBJPROP_YDISTANCE, 55);// Y koordinatı başka ObjectSet("Obj_Label3",OBJPROP_YDISTANCE, 55);// Y koordinatı
Nasıl doğru yazacağımı söyler misin? Maksimum lottan yineleyerek bir döngü kullanarak hesaplamak istedim.
mantık nerede? İlk siparişte izin verilen maksimum lotu koyarsınız ve sonraki her sipariş için artırırsınız. En hafif tabirle bunun çok makul olmadığını düşünmüyor musunuz?
Ayrıca, döngüde, tamamen mantıksız bir yöntemle birinci dereceden partiyi azaltırsınız ve bundan önce "hesaplanan" diğer siparişlerin çoğu değişmeden kalır, ayrıca bu değerler sınırlarının ötesine geçmez. bu işlev . O zaman neden onlar?
Döngü artışının gerçek bir sayı olamayacağı gerçeğinden bahsetmiyorum bile, bu bir sayaçtır, bir tam sayı olmalıdır. Ve lotun değerini bir sayaç olarak ayarlarsınız ve her yinelemeden birer birer çıkarırsınız. Bu büyük bir hatadır, çok ciddi bir hatadır.
Mantığı önce kafanızda düzeltin, ardından koda çevirmeye çalışın.
51 numaralı bir satır yazdırın, çünkü "Tür dönüşümü nedeniyle olası veri kaybı Bolinger_Bands_traider.mq4 51 24" hatasını anlamak için burada hesaplama yapmayın
MQL5.com web sitesine giriş yapmak için çerezlerin kullanımına izin vermelisiniz.
Lütfen tarayıcınızda gerekli ayarı etkinleştirin, aksi takdirde giriş yapamazsınız.
Hesabınıza giriş yaptınız. İki faktörlü kimlik doğrulama devre dışı bırakıldı. Yeniden kurup yeni bir QR kodu tarayın veya iki faktörlü kimlik doğrulama devre dışıyken devam edin.
İşte olanlar. Lütfen bana neyin yanlış olduğunu söyle. Şimdiden teşekkürler!
Merhaba!
buraya yazıyorum çünkü mq4'te kimse yok gibi görünüyor.
Lütfen bana neyi yanlış yaptığımı söyle? 2. seçenek çalışmıyor.
Merhaba! Lütfen MT4'te bir fonksiyon yazarken yardım edin. Hesap bakiyesini biliyorum (Hesap Bakiyesi), kaç tane işlem açacağımı biliyorum (örneğin, 9) Riski biliyorum (örneğin, Hesap Bakiyesinin %3'ü), eğer varsa ilk işlemin lotunu hesaplamam gerekiyor. sonraki her lot ikiye katlanacak ve tüm anlaşmalar birer birer üst üste gelecek.
İşte olanlar. Lütfen bana neyin yanlış olduğunu söyle. Şimdiden teşekkürler!
Merhaba!
buraya yazıyorum çünkü mq4'te kimse yok gibi görünüyor.
Lütfen bana neyi yanlış yaptığımı söyle? 2. seçenek çalışmıyor.
Vurgulanan: Bir atama - "=" olmalı ve bir karşılaştırmanız var - "==".
Merhaba !
Mt4'te robot yazmayı öğreniyorum, ikili seçeneklerle başlamaya karar verdim. En basit Uzman Danışmanı yazıyorum ve derleyici başa çıkamadığım bir sürü uyarı veriyor (
Yardım: "MQL4 guruları hakkında" =))))))
Şimdiden teşekkürler!)
İşte danışman kodu.
//+------------------------------------------- --------------------+
//| Bolinger_Bands_traider.mq4 |
//| Telif hakkı 2017, Penrov Nikolay |
//| vk.com/buzamonolit |
//+------------------------------------------- --------------------+
#özellik telif hakkı "Telif hakkı 2017, Petrov Nikolay"
#özellik bağlantısı "vk.com/buzamonolit"
#özellik sürümü "1.00"
#mülkiyet katı
//+------------------------------------------- --------------------+
//| uzman başlatma işlevi |
//+------------------------------------------- --------------------+
extern int Bolinger_Bands = 20; // Bollinger Bantlarının Periyodu
dış çift Delta = 0.0003; // Bir siparişin hangi mesafede açılacağı
dize Symb; // Finansın adı. alet
int Toplam; // Sipariş sayısı
//+------------------------------------------- --------------------+
//| uzman başlatma işlevi |
//+------------------------------------------- --------------------+
int init()
{
//----
Initialize_Objects(0);
//----
dönüş(0);
}
//+------------------------------------------- --------------------+
//| uzman sıfırlama işlevi |
//+------------------------------------------- --------------------+
int tanım()
{
//----
//----
dönüş(0);
}
//+------------------------------------------- --------------------+
//| uzman başlatma işlevi |
//+------------------------------------------- --------------------+
int başlangıç()
{
//----
çift fiyat = Teklif;
double CurrBol_High = iBands(Symb,0, Bolinger_Bands, 0,0, PRICE_CLOSE, MODE_UPPER, 0);
double CurrBol_Low = iBands(Symb,0, Bolinger_Bands, 0,0, PRICE_CLOSE, MODE_LOWER, 0);
double PriceBol_High = fiyat - CurrBol_High;
double PriceBol_Low = fiyat - CurrBol_Low;
datetime NextClose = Time[0] + Period()*60*2;
int MinutesToNextClose = (NextClose - TimeCurrent())/60 + 1;
int hata;
// Siparişler için muhasebe
Sembol=Sembol(); // fin.instr'nin adı.
toplam=0; // Sipariş sayısı
for(int i=1; i<=OrdersTotal(); i++) // Sipariş üzerinden döngü
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Sonraki Varsa
{ // Siparişlerin analizi:
eğer (OrderSymbol()!=Symb)devam ederse; // Bizim Fincemiz değil. alet
if (OrderType()>1) // Beklemede
{
Alert("Bekleyen bir sipariş algılandı. Expert Advisor çalışmıyor.");
dönüş(0); // başlangıçtan çık()
}
Toplam++; // Pazar sayacı kalabalık
if (Toplam>1) // Birden fazla sipariş yok
{
Alert("Çoklu piyasa emirleri. Expert Advisor çalışmıyor.");
dönüş(0); // başlangıçtan çık()
}
}
}
ObjectSetText("Obj_Label", "TF" + Period() + ", " + DoubleToStr(fiyat, 5) + ", tick " + TimeToStr(TimeCurrent(), TIME_SECONDS) + ", O@" + TimeToStr(Time[0 ], TIME_MINUTES) + ", NC@" + TimeToStr(NextClose, TIME_MINUTES) + " (" + MinutesToNextClose + " dk)", 10, "Arial", DarkGreen );
ObjectSetText("Obj_Label2", "Siparişler: " + Toplam + ", delta " + DoubleToStr(Delta,5) + ", MA'ya uzaklık:" + DoubleToStr(PriceBol_High, 5), 10, "Arial", DarkGreen );
ObjectSetText("Obj_Label3", "Siparişler: " + Toplam + ", delta " + DoubleToStr(Delta,5) + ", MA'ya uzaklık:" + DoubleToStr(PriceBol_Low, 5), 10, "Arial", DarkGreen );
// fiyat analizi ve açılış emirleri
if ((MathAbs(PriceBol_Low) < Delta) && (fiyat > CurrBol_Low) && (Açık[0] > CurrBol_Low+Delta) && (Toplam<1))
{
if (OrderSend(Symbol(), OP_BUY, 1.00,Bid , 3, 0, 0,"BO exp:900", 0,DoubleToStr(MinutesToNextClose,0), Green) >0) Print("Opened OK");
başka
{
err=GetLastError();
print("hata(",hata,")");
dönüş(0);
}
Print("ÇAĞRI @ " + fiyat + " " + TimeToStr(TimeCurrent(), TIME_SECONDS) + " exp in " + MinutesToNextClose);
}
if ((MathAbs(PriceBol_High) < Delta) && (fiyat < CurrBol_High) && (Açık[0] < CurrBol_Yüksek-Delta) && (Toplam<1))
{
if (OrderSend(Symbol(), OP_SELL, 1.00,Bid , 3, 0, 0,"BO exp:900", 0,DoubleToStr(MinutesToNextClose,0), Red) > 0) Print("Opened OK");
başka
{
err=GetLastError();
print("hata(",hata,")");
dönüş(0);
}
Yazdır ("PUT @ " + fiyat + " " + TimeToStr(TimeCurrent(), TIME_SECONDS) + " exp in " + MinutesToNextClose);
}
//----
dönüş(0);
}
//+------------------------------------------- --------------------+
int Initialize_Objects(int Win) // Kullanıcı Fonksiyonu
{ // ..nesne oluşturma
ObjectCreate("Obj_Label",OBJ_LABEL, Win, 0,0); // Bir nesne oluştur
ObjectSet("Obj_Label", OBJPROP_CORNER, 0); // Köşeye yasla
ObjectSet("Obj_Label", OBJPROP_XDISTANCE, 13); // X koordinatı
eğer (Kazanç==0)
ObjectSet("Obj_Label",OBJPROP_YDISTANCE, 15);// Y koordinatı
başka
ObjectSet("Obj_Label",OBJPROP_YDISTANCE,15);// Y koordinatı
ObjectCreate("Obj_Label2",OBJ_LABEL, Kazan, 0,0); // Bir nesne oluştur
ObjectSet("Obj_Label2", OBJPROP_CORNER, 0); // Köşeye yasla
ObjectSet("Obj_Label2", OBJPROP_XDISTANCE, 13); // X koordinatı
eğer (Kazanç==0)
ObjectSet("Obj_Label2",OBJPROP_YDISTANCE, 35);// Y koordinatı
başka
ObjectSet("Obj_Label2",OBJPROP_YDISTANCE, 35);// Y koordinatı
ObjectCreate("Obj_Label3",OBJ_LABEL, Kazan, 0,0); // Bir nesne oluştur
ObjectSet("Obj_Label3", OBJPROP_CORNER, 0); // Köşeye yasla
ObjectSet("Obj_Label3", OBJPROP_XDISTANCE, 13); // X koordinatı
eğer (Kazanç==0)
ObjectSet("Obj_Label3",OBJPROP_YDISTANCE, 55);// Y koordinatı
başka
ObjectSet("Obj_Label3",OBJPROP_YDISTANCE, 55);// Y koordinatı
dönüş(0); // Kullanıcı işlevinden çık
}
Ve işte uyarılar. neyi sevmediğini anlayamıyorum
tür dönüşümü nedeniyle olası veri kaybı Bolinger_Bands_traider.mq4 51 24
'sayı'dan 'string'e örtük dönüştürme Bolinger_Bands_traider.mq4 76 35
'sayı'dan 'string'e örtük dönüştürme Bolinger_Bands_traider.mq4 76 227
'sayı'dan 'string'e örtük dönüştürme Bolinger_Bands_traider.mq4 77 43
'sayı'dan 'string'e örtük dönüştürme Bolinger_Bands_traider.mq4 78 43
'dize'den 'sayıya' örtük dönüştürme Bolinger_Bands_traider.mq4 85 71
'sayı'dan 'string'e örtük dönüştürme Bolinger_Bands_traider.mq4 93 23
'sayı'dan 'string'e örtük dönüştürme Bolinger_Bands_traider.mq4 93 91
'dize'den 'sayıya' örtük dönüştürme Bolinger_Bands_traider.mq4 99 72
'sayı'dan 'string'e örtük dönüştürme Bolinger_Bands_traider.mq4 107 23
'sayı'dan 'string'e örtük dönüştürme Bolinger_Bands_traider.mq4 107 91
0 hata(lar), 11 uyarı(lar), derleme süresi: 204 msn 1 12
İlköğretim. Hata GetLots() işlevidir. Tüm işlev.
Nasıl doğru yazacağımı söyler misin? Maksimum lottan yineleyerek bir döngü kullanarak hesaplamak istedim.
Nasıl doğru yazacağımı söyler misin? Maksimum lottan yineleyerek bir döngü kullanarak hesaplamak istedim.
mantık nerede? İlk siparişte izin verilen maksimum lotu koyarsınız ve sonraki her sipariş için artırırsınız. En hafif tabirle bunun çok makul olmadığını düşünmüyor musunuz?
Ayrıca, döngüde, tamamen mantıksız bir yöntemle birinci dereceden partiyi azaltırsınız ve bundan önce "hesaplanan" diğer siparişlerin çoğu değişmeden kalır, ayrıca bu değerler sınırlarının ötesine geçmez. bu işlev . O zaman neden onlar?
Döngü artışının gerçek bir sayı olamayacağı gerçeğinden bahsetmiyorum bile, bu bir sayaçtır, bir tam sayı olmalıdır. Ve lotun değerini bir sayaç olarak ayarlarsınız ve her yinelemeden birer birer çıkarırsınız. Bu büyük bir hatadır, çok ciddi bir hatadır.
Mantığı önce kafanızda düzeltin, ardından koda çevirmeye çalışın.
Ve işte uyarılar. neyi sevmediğini anlayamıyorum
tür dönüşümü nedeniyle olası veri kaybı Bolinger_Bands_traider.mq4 51 24
'sayı'dan 'string'e örtük dönüştürme Bolinger_Bands_traider.mq4 76 35
'sayı'dan 'string'e örtük dönüştürme Bolinger_Bands_traider.mq4 76 227
'sayı'dan 'string'e örtük dönüştürme Bolinger_Bands_traider.mq4 77 43
'sayı'dan 'string'e örtük dönüştürme Bolinger_Bands_traider.mq4 78 43
'dize'den 'sayıya' örtük dönüştürme Bolinger_Bands_traider.mq4 85 71
'sayı'dan 'string'e örtük dönüştürme Bolinger_Bands_traider.mq4 93 23
'sayı'dan 'string'e örtük dönüştürme Bolinger_Bands_traider.mq4 93 91
'dize'den 'sayıya' örtük dönüştürme Bolinger_Bands_traider.mq4 99 72
'sayı'dan 'string'e örtük dönüştürme Bolinger_Bands_traider.mq4 107 23
'sayı'dan 'string'e örtük dönüştürme Bolinger_Bands_traider.mq4 107 91
0 hata(lar), 11 uyarı(lar), derleme süresi: 204 msn 1 12
51 numaralı bir satır yazdırın, çünkü "Tür dönüşümü nedeniyle olası veri kaybı Bolinger_Bands_traider.mq4 51 24" hatasını anlamak için burada hesaplama yapmayın
Gerisi: "'sayıdan' 'string' Bolinger_Bands_traider.mq4 107 91'e örtük dönüştürme" ihtiyacınız olanı söylüyor:
sayısal değerleri, nesneyi oluşturduğumuz bir metin dizesine çevirin - örneğin bir metin dizesi
Dönem()
olmalı
DoubleToString(Periyot(),0)
sayısal değerleri, nesneyi oluşturduğumuz bir metin dizesine çevirin - örneğin bir metin dizesi
Dönem()
olmalı
DoubleToString(Periyot(),0)
Ve ne zamandan beri nokta tipi Double ?