MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 101
![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
belirsiz. Danışmanı durdurmanız gerekiyorsa, önerilen seçenek bununla başa çıkar, durmanız gerekmiyorsa, ticaret yapmasına izin verin ve onu hiçbir şeyle sınırlamayın. Durduktan sonra talep üzerine işlem yapmanız gerekiyorsa, zamanı değiştirin, Devre Dışı gerçek olacak ve program çalışmaya devam edecektir.
Tamam teşekkürler.
Muhtemelen, "Kapanıştan sonra alım satım yapıyoruz veya kapanıştan sonra alım satım yapmıyoruz" giriş parametrelerini belirleme seçeneğine sahip olmak istersiniz?
Eğer öyleyse, işte burada:
// OnTick
if (OneTrade && !Disabled) return ;
Bayrağı köreltmiş gibi görünmüyordum
Muhtemelen, "Kapanıştan sonra alım satım yapıyoruz veya kapanıştan sonra alım satım yapmıyoruz" giriş parametrelerini belirleme seçeneğine sahip olmak istersiniz?
Eğer öyleyse, işte burada:
// OnTick
if (OneTrade && !Disabled) return ;
Bayrağı köreltmiş gibi görünmüyordum
Teşekkür ederim!
Soru şu: Bu giriş ne kadar doğru, programın başında ve program boyunca çok fazla Zaman[0] ve Zaman[1] kullanılıyor ve her seferinde çağrılmamak için değişken olarak yazılır. Dizi sınırları dışında hata yok gibi görünüyor, ancak her şey yüzeysel olarak tanımlanmış:
//------------
void OnTimer ()
ArraySetAsSeries (TM, true );
if ( CopyTime ( _Symbol , PERIOD_CURRENT , 0 , 2 , TM)==- 1 ) return ;
TIME0 = TM[ 0 ];
TIME1 = TM[ 1 ];
Teşekkür ederim!
Biraz düzeltmenizi rica edebilir miyim?
Geçerli fiyata dikey bir çizgi yerleştirin
veya benzer bir durumun olduğu bir danışmana bağlantı
Çalışması için parametreleri botun etrafına nasıl dağıtacağımı anlamak istiyorum.
Biraz düzeltmenizi rica edebilir miyim?
Geçerli fiyata dikey bir çizgi yerleştirin
veya benzer bir durumun olduğu bir danışmana bağlantı
Çalışması için parametreleri botun etrafına nasıl dağıtacağımı anlamak istiyorum.
İlk olarak, alıntıların görüntüsünü 90 derece döndürmeniz gerekir.
998 sonrası
Yatay veya dikey olması umurumda değil, sadece orada yaptığım şey işe yaramıyor
998 sonrası
Yatay veya dikey olması umurumda değil, sadece orada yaptığım şey işe yaramıyor
// Функцию - за пределы остальных функций программы
//+------------------------------------------------------------------+
//| Трейлинг по значению + перенос стопа на уровень безубытка |
//+------------------------------------------------------------------+
void TrailingByLevel( string symbol_name, // Имя символа
int magic_number, // Magic ордера
double level_of_trail, // Уровень, на который ставим стоп (например МА или Parabolic SAR)
int trailing_start, // Профит в пунктах для старта трала
int trailing_step, // Шаг трала в пунктах
int trailing_stop, // Отступ стоплосс от уровня МА или SAR в пунктах
int profit_for_breakeven= 15 , // Профит в пунктах для переноса стопа в безубыток
int breakeven_level= 5 , // Уровень безубытка в пунктах
bool use_trail= true , // Флаг использования трала
bool use_breakeven= false // Флаг использования безубытка
)
{
int lv=StopLevel(symbol_name)+ 1 ; // Получаем значение Stop Level по символу + 1 пункт (из отдельной функции)
for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--) {
if ( OrderSelect (i, SELECT_BY_POS )) {
if ( OrderMagicNumber ()!=magic_number) continue ; //Если Магик не наш - идем к следующему ордеру
if ( OrderSymbol ()!=symbol_name) continue ; //Если Символ не наш - идем к следующему ордеру
//--- покупки
if ( OrderType ()== OP_BUY ) {
int digits=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
double point=( SymbolInfoDouble (symbol_name, SYMBOL_POINT ));
double pb= SymbolInfoDouble (symbol_name, SYMBOL_BID );
double profit=pb- OrderOpenPrice (); // Профит позиции в цене (без комиссий и свопов)
//--- безубыток
if (use_breakeven) {
//--- если профит в цене больше заданного
if (profit>=profit_for_breakeven*point) {
int err= ERR_NO_ERROR ;
double sl= NormalizeDouble ( OrderOpenPrice ()+breakeven_level*point,digits);
if (pb-lv*point>sl && OrderStopLoss ()<sl) {
// Сюда вписываем свою функцию модификации. Можно конечно и стандартной обойтись:
// OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration(),clrModify); ...
// ... но в ней не предусмотрены проверки кодов возврата торгового сервера и их обработка
//ModifyOrder(-1,sl,-1,err);
}
if (err== ERR_MARKET_CLOSED ) return ;
}
}
//--- трал
if (use_trail) {
//--- если профит в пунктах больше заданного, или изначально задан меньше ноля
if (profit>=trailing_start*point || trailing_start== EMPTY ) {
int err= ERR_NO_ERROR ;
double sl= NormalizeDouble (level_of_trail-trailing_stop*point,digits); // вычисляем новый уровень стоплосс по значению, переданному в функцию
//--- Если новое значение СЛ не ближе Stop Level и если новое положение СЛ больше старого+шаг СЛ, то модифицируем стоп позиции
if (pb-lv*point>sl && OrderStopLoss ()+trailing_step*point<sl) {
// Сюда вписываем свою функцию модификации. Можно конечно и стандартной обойтись:
// OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration(),clrModify); ...
// ... но в ней не предусмотрены проверки кодов возврата торгового сервера и их обработка
//ModifyOrder(-1,sl,-1,err);
}
if (err== ERR_MARKET_CLOSED ) return ;
}
}
}
//--- Продажи
if ( OrderType ()== OP_SELL ) {
int digits=( int ) SymbolInfoInteger (symbol_name, SYMBOL_DIGITS );
double point=( SymbolInfoDouble (symbol_name, SYMBOL_POINT ));
double pa= SymbolInfoDouble (symbol_name, SYMBOL_ASK );
double profit= OrderOpenPrice ()-pa; // Профит позиции в цене (без комиссий и свопов)
//--- безубыток
if (use_breakeven) {
//--- если профит в цене больше заданного
if (profit>=profit_for_breakeven*point) {
int err= ERR_NO_ERROR ;
double sl= NormalizeDouble ( OrderOpenPrice ()-breakeven_level*point,digits);
if (pa+lv*point<sl && ( OrderStopLoss ()>sl || OrderStopLoss ()== 0 )) {
// Сюда вписываем свою функцию модификации. Можно конечно и стандартной обойтись:
// OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration(),clrModify); ...
// ... но в ней не предусмотрены проверки кодов возврата торгового сервера и их обработка
//ModifyOrder(-1,sl,-1,err);
}
if (err== ERR_MARKET_CLOSED ) break ;
}
}
//--- трал
if (use_trail) {
//--- если профит в пунктах больше заданного, или изначально задан меньше ноля
if (profit>=trailing_start*point || trailing_start== EMPTY ) {
int err= ERR_NO_ERROR ;
double sl= NormalizeDouble (level_of_trail+trailing_stop*point,digits); // вычисляем новый уровень стоплосс по значению, переданному в функцию
//--- Если новое значение СЛ не ближе Stop Level и если новое положение СЛ больше старого+шаг СЛ, то модифицируем стоп позиции
if (pa+lv*point<sl && ( OrderStopLoss ()-trailing_step*point>sl || OrderStopLoss ()== 0 )) {
// Сюда вписываем свою функцию модификации. Можно конечно и стандартной обойтись:
// OrderModify(OrderTicket(),OrderOpenPrice(),sl,OrderTakeProfit(),OrderExpiration(),clrModify); ...
// ... но в ней не предусмотрены проверки кодов возврата торгового сервера и их обработка
//ModifyOrder(-1,sl,-1,err);
}
if (err== ERR_MARKET_CLOSED ) break ;
}
}
}
}
}
}
//+------------------------------------------------------------------+
int StopLevel( string symbol_name) {
int sp=( int ) SymbolInfoInteger (symbol_name, SYMBOL_SPREAD );
int lv=( int ) SymbolInfoInteger (symbol_name, SYMBOL_TRADE_STOPS_LEVEL );
return ((lv== 0 )?sp* 2 :lv);
}
//+------------------------------------------------------------------+
İnsanların genellikle sondaki veya başabaş işlevini sorduğunu fark ettim. Burada, stop'u belirli bir başabaş seviyesine taşımak ve fiyat grafiğinde çizgilerini çizen fonksiyona (örneğin MA veya parabolik) geçen bir göstergenin değerine göre pozisyon stopunu takip etmek için bir saplama işlevi ekledim.
Genel olarak, ezhli bir şey - sorun. veya doğru