MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 101

 
Vitaly Muzichenko :
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.
 
trader781 :
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:

extern bool OneTrade = true ;

// OnTick
if (OneTrade && !Disabled) return ;

Bayrağı köreltmiş gibi görünmüyordum

 
Vitaly Muzichenko :

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:

extern bool OneTrade = true ;

// OnTick
if (OneTrade && !Disabled) return ;

Bayrağı köreltmiş gibi görünmüyordum

Her şey, anladım, kaçırdığım şey bu. Düzgün bir şekilde düzenlenirse bir değişkenin yeterli olacağını düşündüm.
 
Vitaly Muzichenko :

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ış:

datetime TM[], TIME0, TIME1;

//------------
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!

Esasen, bir değişkene mi yoksa dizi hücresine mi erişiyor olmanız önemli değil. belki sadece elde etme hızında ama mikroskobik olduğunu düşünüyorum, değişkenlerle bir ölçüm yapın ve diziye doğrudan erişin.
 
Vitaly Muzichenko :

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.

 
trader781 :

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.
 
Alexey Viktorov :
İ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

 
trader781 :

998 sonrası

Yatay veya dikey olması umurumda değil, sadece orada yaptığım şey işe yaramıyor

Hayır, üzgünüm, konuya girmiyorum.
 
İ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 bazı göstergelerin değerine göre pozisyon stopunu takip etmek için bir saplama işlevi ekledim.

#property strict // в самое начало кода вашей программы (если нету там ещё)


// Функцию - за пределы остальных функций программы
//+------------------------------------------------------------------+
//| Трейлинг по значению + перенос стопа на уровень безубытка        |
//+------------------------------------------------------------------+
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);
   }
//+------------------------------------------------------------------+
Genel olarak, ezhli bir şey - sorun. veya doğru
 
Artyom Trishkin :
İ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
Merhaba Artyom, neden CodeBase'e yerleştirmiyorsun? En az bir tane daha doğru kod orada olacak.