[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 3. - sayfa 253

 
granit77 :
Etkilenmiş:

qaz2005 11.10.2011 09:30
Herkese iyi günler! Lütfen söyle bana, özel bir gösterge var, iki nesnesi var. Anlamlarını bulabilirim, ama ister üst satırda ister alt satırda olsun, onları tanımanın bir yolu yok. Tampon sayısını ve sırasını bulamıyorum, kurulum sırasında herhangi bir ayar yok. İnternette renk ayarlarının da arabellek olarak geldiğini okudum, bunlara iCustom() işlevi aracılığıyla nasıl erişebilirim veya bu anda başka bir işlev çalışabilir mi?

Şimdiden teşekkürler!

PS MQL4 dili hakkında herhangi bir literatür var mı? MQL4 Eğitimini zaten indirdim ve neredeyse tamamladım.

arabellek numaraları "0"dan sayılır,

iCustom(NULL, 0,"ind",150, 0.2);

150 nokta nerede,

0 bir arabellektir,

2 bir çubuktur.

https://docs.mql4.com/en/indicators/iCustom

Örneğin

#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red

yani büyük olasılıkla, mavi = 0 arabellek olacaktır

ve kırmızı = 1

 
skyjet :
İskender! Deneyiminizi paylaştığınız için teşekkürler! Ama bu arada, bir sorum vardı, para birimlerinin sayımı nasıl yapılıyor? Yoksa bu, OrderSend() işlevindeki Symbol() yerine para biriminin adı mı? Ve örneğinizi koda nasıl yazacağınızı açıklayabilir misiniz? Yardımın için tekrar teşekkürler! :)

Roman temelde açıkladı.

Expert Advisor'da Symbol() öğesinin belirtildiği her yerde, örneğin: SymbolMax[nnnn] öğesini ayarlayın. OrderSend() işlevinde şöyle görünür:

tick=SiparişGönder( SymbolMax[nnnn] ,OP_BUYSTOP,L,ur,0,sl,tp,CMM,MAGIC[I],0,Kırmızı);

Danışmanımdaki gibi yazıyorum ve orada kendi değerlerinizi kendiniz değiştiriyorsunuz. Ve elbette, para birimlerinin listesini not edin, örneğin:

string SymbolMax[4] = {"EURUSD", "GBPUSD", "USDCHF", "USDJPY"};

Belki birileri bunu farklı şekilde uygulamıştır, ancak bunun gibi bir para birimi listem var - aşağıdaki koda bakın. Fonksiyon başlangıcında teslim edilir. Ayrıca mesajların sarsılmaması için 5 saniyelik bir gecikme yaptım.

 if (nnnn< 24 ) nnnn+= 1 ; else nnnn= 0 ;
 


modifiye kullanarak döngü ile ilgili bir sorunum var,

değişiklik, kullanıcı tanımlı bir işlev olarak sağlanır
standart trolün en ilginç işlevi bu iki işlevle de çalışır, tek başına da iyi çalışır ve fraktal modifikasyonu başabaş ile kullandığımda, fraktal ve başabaş için sonsuz modifikasyonlar başlar

https://book.mql4.com/en/trading/ordermodify değişikliğine göre

Başabaş değerini değiştirme kriteri yanlış ayarlanmış gibi görünüyor, döngü olmaması için bunu nasıl düzeltebilirim?




//ф-я модификации ордеров безубыток

int mod_b()
{
//--------------------------------------------------------------- 2 --
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:
int Tip=OrderType(); // Тип ордера
if(OrderSymbol()!=Symb||Tip>1)continue;// Не наш ордер
double SL=OrderStopLoss(); // SL выбранного орд.
double TP =OrderTakeProfit(); // TP выбранного орд.
double Price =OrderOpenPrice(); // Цена выбранн. орд.
int Ticket=OrderTicket(); // Номер выбранн. орд.
//------------------------------------------------------ 3 --
while(true) // Цикл модификации
{
double TS=Tral_Stop; // Исходное значение
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист&&((SL<TS && Tip==0)||(SL>TS && Tip==1))
if (TS < Min_Dist) // Если меньше допуст.
TS=Min_Dist; // Новое значение TS
//--------------------------------------------------- 4 --
bool Modify=false; // Не назначен к модифи
switch(Tip) // По типу ордера
{
case 0 : // Ордер Buy
if (NormalizeDouble(SL,Digits)< // Если ниже желаем.
NormalizeDouble(Bid-TS*Point,Digits))
{
SL=Price+18*Point; // то модифицируем его
string Text="Buy "; // Текст для Buy
Modify=true; // Назначен к модифи.
}
break; // Выход из switch
case 1 : // Ордер Sell
if (NormalizeDouble(SL,Digits)> // Если выше желаем.
NormalizeDouble(Ask+TS*Point,Digits)
|| NormalizeDouble(SL,Digits)==0)//или равно нулю
{
SL=Price-18*Point; // то модифицируем его
Text="Sell "; // Текст для Sell
Modify=true; // Назначен к модифи.
}
} // Конец switch
if (Modify==false) // Если его не модифи
break; // Выход из while
//--------------------------------------------------- 5 --

Alert ("Модификация ",Text,Ticket,". Ждём ответ..");
bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифи его!
//--------------------------------------------------- 6 --
if (Ans==true) // Получилось :)
{
Alert ("Ордер ",Text,Ticket," модифицирован:)");
break; // Из цикла модифи.
}

int mod_f()
{
//--------------------------------------------------------------- 2 --
for(int i=1; i<=OrdersTotal(); i++) // Цикл перебора ордер
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
{ // Анализ ордеров:
int Tip=OrderType(); // Тип ордера
if(OrderSymbol()!=Symb||Tip>1)continue;// Не наш ордер
double SL=OrderStopLoss(); // SL выбранного орд.

//------------------------------------------------------обсчет фрактала

int f = 3; //номер бара с которого идет проверка наличия фрагтала
int DnN = 0, UpN = 0; //порядковый номер присвоен к направлению(upper, lower)
double UpFr = 0, DnFr = 0; //числовое значение фрагтала выраженное в еденице валюты присвоен к направлению(upper, lower)
while (f < Bars && (UpFr == 0 || DnFr == 0))
{
if (iFractals(Symbol(), 0, MODE_UPPER, f) != 0)
if (UpFr == 0)
{
UpFr = iFractals(Symbol(), 0, MODE_UPPER, f);//фрактальная отложка вверх(buy)
UpN = f;
}
if (iFractals(Symbol(), 0, MODE_LOWER, f) != 0)
if (DnFr == 0)
{
DnFr = iFractals(Symbol(), 0, MODE_LOWER, f);//фрактальная отложка вниз(sell)
DnN = f;
}
f++;
}
//------------------------------------------------------ 3 --
while(true) // Цикл модификации
{
double UD;
double TS=UD; // Исходное значение
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);//Миним. дист
if(Tip==0)
UD=DnFr;
if(Tip==1)
UD=UpFr;
if (TS < Min_Dist) // Если меньше допуст.
TS=Min_Dist; // Новое значение TS
//--------------------------------------------------- 4 --
bool Modify=false; // Не назначен к модифи
switch(Tip) // По типу ордера
{
case 0 : // Ордер Buy
if (NormalizeDouble(SL,Digits)< // Если ниже желаем.
NormalizeDouble(UD,Digits))
{
SL=UD; // то модифицируем его
string Text="Buy "; // Текст для Buy
Modify=true; // Назначен к модифи.
}
break; // Выход из switch
case 1 : // Ордер Sell
if (NormalizeDouble(SL,Digits)> // Если выше желаем.
NormalizeDouble(UD,Digits)
|| NormalizeDouble(SL,Digits)==0)//или равно нулю
{
SL=UD; // то модифицируем его
Text="Sell "; // Текст для Sell
Modify=true; // Назначен к модифи.
}
} // Конец switch
if (Modify==false) // Если его не модифи
break; // Выход из while
//--------------------------------------------------- 5 --
double TP =OrderTakeProfit(); // TP выбранного орд.
double Price =OrderOpenPrice(); // Цена выбранн. орд.
int Ticket=OrderTicket(); // Номер выбранн. орд.

Alert ("Модификация ",Text,Ticket,". Ждём ответ..");
bool Ans=OrderModify(Ticket,Price,SL,TP,0);//Модифи его!
//--------------------------------------------------- 6 --
if (Ans==true) // Получилось :)
{
Alert ("Ордер ",Text,Ticket," модифицирован:)");
break; // Из цикла модифи.
}
 

Merhaba sevgili forum kullanıcıları.

Bana diğer zaman dilimlerinden nasıl fiyat teklifi talep edebileceğinizi söyleyin? Şablonum D üzerinde ve göstergenin daha küçük zaman dilimlerinden (örneğin M30, H1, H4) DÜŞÜK, YÜKSEK, AÇIK, KAPALI tırnaklara ihtiyacı var.

 
Slava2007 :

Merhaba sevgili forum kullanıcıları.

Bana diğer zaman dilimlerinden nasıl fiyat teklifi talep edebileceğinizi söyleyin? Şablonum D olarak ayarlandı ve göstergenin daha küçük zaman dilimlerinden (örneğin M30, H1, H4) DÜŞÜK, YÜKSEK, AÇIK, KAPALI tırnaklara ihtiyacı var.

https://docs.mql4.com/ru/series
 

Herkese iyi akşamlar. bana burada neyin yanlış olduğunu söyle. işte bir kod parçası.

//+------------------------------------------- --------------------+
//| başlatma işlevi |
//+------------------------------------------- --------------------+
geçersiz başlangıç()
{
//---- geçmişi ve ticareti kontrol et
if(Bars<100 || IsTradeAllowed()==yanlış) dönüş;
//---- açık siparişleri mevcut sembole göre hesapla
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
başka CheckForClose();

if (!IfTrueThenCountBarWork) döndürme (0);
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES)
if (OrderMagicNumber() == 700000) <---- BU SATIRDA HATA!!!
CloseAfterSomeBar(CountBar, OrderTicket());
}

}

 
isaev-av :

Herkese iyi akşamlar. bana burada neyin yanlış olduğunu söyle. işte bir kod parçası.

//+------------------------------------------- --------------------+
//| başlatma işlevi |
//+------------------------------------------- --------------------+
geçersiz başlangıç()
{
//---- geçmişi ve ticareti kontrol et
if(Bars<100 || IsTradeAllowed()==yanlış) dönüş;
//---- açık siparişleri mevcut sembole göre hesapla
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
başka CheckForClose();

if (!IfTrueThenCountBarWork) döndürme (0);
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES)
if (OrderMagicNumber() == 700000) <---- BU SATIRDA HATA!!!
CloseAfterSomeBar(CountBar, OrderTicket());
}

}

Eksik karakter ";"
 

PapaYozh :
Пропущен символ ";"

Teşekkür ederim!!! Hemen fark etmedim.


 

Uzmanlar için başka bir soru. açılış koşulu buraya nasıl doğru girilir: Kapat[2]<Kapat[3] yüzde n, bu satış içindir. tabiki aksine satın almak için. ve bu n optimize edilebilir mi? şimdiden teşekkürler!

geçersiz CheckForOpen()
{
çift ana;
iç;
//---- sadece yeni çubuğun ilk tikleriyle işlem yap
if(Volume[0]>1) dönüşü;
//---- Hareketli Ortalamayı al
ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---- satış koşulları
if(Open[1]>ma && Kapat[1]<ma)
{
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Kırmızı);
dönüş;
}
//---- satın alma koşulları
if(Open[1]<ma && Close[1]>ma)
{
res=SiparişGönder(Symbol(),OP_BUY,LotsOptimized(),Sor,3,0,0,"",MAGICMA,0,Mavi);
dönüş;
}

 

nerede yanlış yaptığımı söyle lütfen... yoksa MT4'ün kendisi bile aptal mı, ama Alış emirlerim sadece çubuğun en üstünde açılıyor ve Satış emirleri sadece çubuğun Kapanışında açılıyor =) Her ne kadar şart koşmamış olsam da EA kodundaki bu koşullar = )

 extern int TP = 200 ; 
     extern int TS = 50 ; 
     extern int TF = 1 ; 
     extern double lots = 0.1 ; 
     extern int Pips = 15 ; 
     extern int MaxPips = 100 ; 


     int slip = 3 ; 
     int Magic = 2 ; 
     int cnt,ticket,total; 

 //+------------------------------------------------------------------+ 
   //| expert initialization function | 
   //+------------------------------------------------------------------+ 
   int init() 
    { 
   //---- 

 //---- 
     return ( 0 ); 
    } 
   //+------------------------------------------------------------------+ 
   //| expert deinitialization function | 
   //+------------------------------------------------------------------+ 
   int deinit() 
    { 
   //---- 

 //---- 
     return ( 0 ); 
    } 
   //+------------------------------------------------------------------+ 
   //| expert start function | 
   //+------------------------------------------------------------------+ 

 int start() 
    { 
   //---- 

 static double PriceOld = 0.0 ; 
 double PriceNow; 
 PriceNow = NormalizeDouble (Bid, 6 ); 

 total = OrdersTotal (); 
 if (total < 1 ) 
 { 
     if ((PriceNow-PriceOld)>=Pips* Point && (PriceNow-PriceOld)<MaxPips* Point ) 
    { 
           ticket = OrderSend ( Symbol (),OP_BUY,lots,Ask,slip,Bid-TS* Point , 0 , 0 ,Magic, 0 , Green ); 
           if (ticket> 0 ) 
               { 
                   OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES); 
                   Print ( "Ордер на покупку успешно открыт по цене:" , OrderOpenPrice ()); 
               } 
               else 
               { 
                   Print ( "Ордер не открыт по причине:" , GetLastError ()); 
                   return ( 0 ); 
               } 
     } 

 if ((PriceNow-PriceOld)<=(-Pips)* Point && (PriceNow-PriceOld)>(-MaxPips)* Point ) 
     { 
           ticket = OrderSend ( Symbol (),OP_SELL,lots,Bid,slip,Ask+TS* Point , 0 , 0 ,Magic, 0 , Red ); 
           if (ticket> 0 ) 
               { 
                   OrderSelect (ticket,SELECT_BY_TICKET,MODE_TRADES); 
                   Print ( "Ордер на покупку успешно открыт по цене:" , OrderOpenPrice ()); 
               } 
               else 
               { 
                   Print ( "Ордер не открыт по причине:" , GetLastError ()); 
                   return ( 0 ); 
               } 
     } 
 } 
return(0);
}