MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 38
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Duck, sağlandığı için argümanı işleve iletir. Kaldırmak daha iyi olsa da, bir totoloji olduğu ortaya çıkıyor.
Ve döngüde, tüm siparişler yeniden hesaplanmayacak.
biletin üzerine yaz, martin ile son siparişten çalış
ve o zaman 'count' bildiriminin nasıl kaldırılacağı, global bildirimi satırda gizler ...
olması gerektiği gibi çalışmasını sağlamak ilginç.
Şimdiye kadar, test cihazının sonuçlarına göre, bir yerde oldukça iyi bir çalışma veriyor, bir yerde hemen "Uzman Danışmanda aşılmaz hatalar"
Selamlar.
Şöyle bir girişe rastladım:
Yani, burada koşullu if ifadesi yerine hemen bool türünde bir ticaret işlevi yazılmıştır. Böyle bir gösterimin şuna eşdeğer olduğunu doğru anlıyor muyum:
if ( OrderSelect (bilet, SELECT_BY_TICKET )) ==true { OrderModify (ticket, OrderOpenPrice (), SL, TP, 0} ; ?
Hem yardıma hem de ders kitabına baktım - bu formatın bir kaydını bulamadım.
Ve bir ifade yerine hemen farklı tipte fonksiyonlar yazmak mümkün müdür? Ve eğer öyleyse, algoritma ne olurdu?
düzeltildi, argüman eklendi, global kapsama taşındı, şimdi bu argümanın diğer fonksiyonlarda girdi olarak kullanıldığına dair bir uyarı veriyor
biletin üzerine yaz, martin ile son siparişten çalış
ve o zaman 'count' bildiriminin nasıl kaldırılacağı, global bildirimi satırda gizler ...
olması gerektiği gibi çalışmasını sağlamak ilginç.
Şimdiye kadar, test cihazının sonuçlarına göre, bir yerde oldukça iyi bir çalışma veriyor, bir yerde hemen "Uzman Danışmanda aşılmaz hatalar"
Selamlar.
Şöyle bir girişe rastladım:
Yani, burada koşullu if ifadesi yerine hemen bool türünde bir ticaret işlevi yazılmıştır. Böyle bir gösterimin şuna eşdeğer olduğunu doğru anlıyor muyum:
if ( OrderSelect (bilet, SELECT_BY_TICKET )) ==true { OrderModify (ticket, OrderOpenPrice (), SL, TP, 0} ; ?
Hem yardıma hem de ders kitabına baktım - bu formatın bir kaydını bulamadım.
Ve bir ifade yerine hemen farklı türde fonksiyonlar yazmak mümkün müdür? Ve eğer öyleyse, algoritma ne olurdu?
Bunun gibi if ( OrderSelect (ticket, SELECT_BY_TICKET )) ==true { OrderModify (ticket, OrderOpenPrice (), SL, TP, 0} ; çalışmaz.Koşul parantezlerin dışına atılamaz.
Ve bunun gibi if ( OrderSelect (ticket, SELECT_BY_TICKET ) ==true) { OrderModify (ticket, OrderOpenPrice (), SL, TP, 0} ; yapabilirsiniz.
Bunun gibi if ( OrderSelect (ticket, SELECT_BY_TICKET )) ==true { OrderModify (ticket, OrderOpenPrice (), SL, TP, 0} ; çalışmaz.Koşul parantezlerin dışına atılamaz.
Ve bunun gibi if ( OrderSelect (ticket, SELECT_BY_TICKET ) ==true) { OrderModify (ticket, OrderOpenPrice (), SL, TP, 0} ; yapabilirsiniz.
Düzeltilmiş halini gösterin, aksi takdirde kod olmadan falcılık elde edilir.
TAMAM.
Elinden geleni yapmış gibi görünüyor. Açıklama yapıldı. Amaç, neden istediğiniz gibi çalışmadığını anlamaktır.
//| ОТЛОЖКИ.mq4 |
//+------------------------------------------------------------------+
extern double StopLoss = 1000 ; //Стоплосс ордера
extern double TakeProfit = 1500 ; //Тейкпрофит ордера
extern double TrailingStop = 1000 ; // трал
extern int Delta = 100 ; //Расстояние от цены для установки ордера
extern double LOT = 0.1 ; //Объём позиции
extern int Magic = 200 ;
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if (TrailingStop!= 0 ) Trailing();
//ИНДИКАТОР RSI
double RSI0= iRSI ( NULL , 0 , 5 , PRICE_CLOSE , 0 );
double RSI1= iRSI ( NULL , 0 , 5 , PRICE_CLOSE , 1 );
int b,s,p,res;
double BuyPrice= Ask +Delta* Point ;
double SellPrice= Bid -Delta* Point ;
for ( int i= 0 ; i< OrdersTotal (); i++)
{
if ( OrderSelect (i, SELECT_BY_POS )== true )
{
if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=Magic) continue ;
if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) p++;
if ( OrderType ()== OP_BUYSTOP ) b++;
if ( OrderType ()== OP_SELLSTOP ) s++;
}
}
double SL,TP;
//---- buy stop
if (RSI0> 50 &&RSI1< 50 )
{
res= OrderSend ( Symbol (), OP_BUYSTOP ,LOT,BuyPrice, 0 ,BuyPrice-StopLoss* Point ,BuyPrice+TakeProfit* Point , "ОТЛОЖКИ" ,Magic, OP_SELLSTOP ,Blue);
}
//---- sell stop
if (RSI0< 50 &&RSI1> 50 )
{
res= OrderSend ( Symbol (), OP_SELLSTOP ,LOT,SellPrice, 0 ,SellPrice+StopLoss* Point ,SellPrice-TakeProfit* Point , "ОТЛОЖКИ" ,Magic, OP_BUYSTOP ,Red );
}
//---- buy stop делете
if (RSI0< 50 &&RSI1> 50 )
{
OrderDelete ( OrderTicket ());
}
//---- sell stop делете
if (RSI0> 50 &&RSI1< 50 )
{
OrderDelete ( OrderTicket ());
}
//----
return ( 0 );
}
//--------------------------------------------------------------------
//---------ФУНКЦИЯ ТРАЛА----------------------------------------------
//--------------------------------------------------------------------
void Trailing()
{
for ( int i= 0 ; i< OrdersTotal (); i++)
{
if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))
if ( OrderSymbol ()== Symbol ()|| OrderMagicNumber ()==Magic)
if ( OrderType ()== OP_BUY )
{
if (TrailingStop> 0 )
{
if ( Bid - OrderOpenPrice ()>TrailingStop)
{
if ( OrderStopLoss ()< Bid -TrailingStop)
{
OrderModify ( OrderTicket (), OrderOpenPrice (), Bid -TrailingStop, OrderTakeProfit (), 0 ,Green);
}
}
}
}
if ( OrderType ()== OP_SELL )
{
if (TrailingStop> 0 )
{
if (( OrderOpenPrice ()- Ask )>TrailingStop)
{
if (( OrderStopLoss ()>( Ask +TrailingStop)) || ( OrderStopLoss ()== 0 ))
{
OrderModify ( OrderTicket (), OrderOpenPrice (), Ask +TrailingStop, OrderTakeProfit (), 0 ,Red);
}
}
}
}
}
}
//+------------------------------------------------------------------------------------+
//+------------------------------------------------------------------------------------+--------------------------------------------------------------------+
açılmamış siparişin biletini nasıl aldınız?
{
if ( OrderSelect (i, SELECT_BY_POS )== true )
{
if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=Magic) continue ;
if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) p++;
if ( OrderType ()== OP_BUYSTOP )
if (сигнал_bue) OrderDelete ( OrderTicket ());
else b++;
if ( OrderType ()== OP_SELLSTOP )
if (сигнал_sell) OrderDelete ( OrderTicket ());
else s++;
}
}
değil mi onu oraya ekleyemem
{
if ( OrderSelect (i, SELECT_BY_POS )== true )
{
if ( OrderSymbol ()!= Symbol () || OrderMagicNumber ()!=Magic) continue ;
if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) p++;
if ( OrderType ()== OP_BUYSTOP )
if (сигнал_bue) OrderDelete ( OrderTicket ());
else b++;
if ( OrderType ()== OP_SELLSTOP )
if (сигнал_sell) OrderDelete ( OrderTicket ());
else s++;
}
}