Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 1481

 
MrBrooklin #:

Şimdi anladım. Teşekkür ederim!!! En az bir açık pozisyon varsa, 4753 hata kodunun asla görünmeyeceği ortaya çıktı.

Saygılarımla, Vladimir.

Aşağıdakileri yazarsanız görünecektir

PositionSelect("мой символ");
 
Alexey Viktorov #:

Şunu yazarsanız görünecektir

Merhaba Alexey, bir açıklama. Bir döngü yerine PositionSelect() kullanmak gerekli mi, yoksa yine bir şeyi yanlış mı anladım?

Saygılarımla, Vladimir.

 
MrBrooklin #:

Merhaba Alexey, bir açıklama. Bir döngü yerine PositionSelect() kullanmak gerekli mi yoksa yine bir şeyi yanlış mı anladım?

Saygılarımla, Vladimir.

İstediğiniz şekilde yazabilirsiniz, önemli olan hata almak için var olmayan bir karakter yazmaktır...

 
Alexey Viktorov #:

İstediğiniz şekilde yazabilirsiniz, asıl önemli olan hata almak için var olmayan bir karakter yazmaktır....

Ama bana terlik fırlatma!!! Hata kodunu alamıyorum. ((((

void OnStart()
  {
   ResetLastError(); // установим значение предопределенной переменной _LastError в ноль
   string symb = "BrooklinUSDrfd";
   PositionSelect(symb);
   PrintFormat("Не удалось выбрать позицию по символу %s. Ошибка = ", symb, GetLastError());
  }

Saygılarımla, Vladimir.

 
MrBrooklin #:
Hata = "
lu belirteci orada olmalıdır
 
Artyom Trishkin #:
Orada bir belirleyici olmalı

Teşekkürler Artem, işe yaradı!!! Hepinize çok teşekkür ederim!

Saygılarımla, Vladimir.

 

Kısacası, burada anlatılan sorunu farklı bir şekilde çözdüm:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   ResetLastError(); // установим значение предопределенной переменной _LastError в ноль
   if(!PositionSelect(_Symbol))
      PrintFormat("Не удалось выбрать позицию по символу %s. Ошибка = %lu", _Symbol, GetLastError());
   int pos_total = PositionsTotal(); // объявим переменную для хранения количества открытых позиций
   if(pos_total > 0) // если есть открытые позиции
     {
      for(int i=0; i<pos_total; i++) // запустим цикл и переберём все открытые позиции
        {
         if(PositionGetSymbol(i) == _Symbol) // выберем все открытые позиции по текущему символу
           {
            ulong  pos_id = PositionGetInteger(POSITION_IDENTIFIER);
            double pos_price = PositionGetDouble(POSITION_PRICE_OPEN);
            double pos_tp = PositionGetDouble(POSITION_TP);
            double pos_sl = PositionGetDouble(POSITION_SL);
            PrintFormat("Позиция #%d цена = %G тейк-профит = %G стоп-лосс = %G", pos_id, pos_price, pos_tp, pos_sl);
           }
        }
     }
  }
//+------------------------------------------------------------------+

Saygılarımla, Vladimir.

 

Herkese iyi akşamlar!

Mevcut bir açık pozisyona ek bir pozisyon (durdurma ve alma olmadan) açan bir fonksiyon oluşturmaya çalışıyorum. Kodu yazdım:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void Open_Add_Pos_Buyl()
  {
   for(int i=pos_total-1; i<pos_total; i++) // ищем последнюю по списку открытую позицию
     {
      PositionGetTicket(i); // получим тикет позиции по индексу в списке открытых позиций
      if(PositionGetString(POSITION_SYMBOL) == _Symbol && // если совпадает символ открытой позиции
         PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY && // если совпадает тип открытой позиции
         PositionGetInteger(POSITION_MAGIC) == Magic_Number) // и если совпадет мэджик
        {
         double pos_price_open=PositionGetDouble(POSITION_PRICE_OPEN); // объявим и инициализируем переменную для цены открытой позиции
         if(// тут задано условие для открытия позиции)
           {
            double new_price_pos=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
            trade.Sell(0.01,_Symbol,new_price_pos,0,0);
           }
        } 
     }
  }

ancak bazı nedenlerden dolayı açık pozisyonu görmüyor. Sorunu hata ayıklayıcı ile bulmaya çalıştım, ancak döngüyü başlattıktan sonra içinde ne yazdığını görmeden hemen işlevden ayrılıyor. Kesme noktasını PositionGetTicket(i)'ye koydum. Lütfen bana kodumda nerede bir hata olduğunu tekrar söyleyebilir misiniz?

Saygılarımla, Vladimir.

 
MrBrooklin açık pozisyona ek bir pozisyon (durdurma ve alma olmadan) açan bir fonksiyon oluşturmaya çalışıyorum. Kodu yazdım:

ancak bazı nedenlerden dolayı açık konumu görmüyor. Sorunu hata ayıklayıcı ile bulmaya çalıştım, ancak döngüyü başlattıktan sonra içinde ne yazdığını görmeden hemen işlevden ayrılıyor. Kesme noktasını PositionGetTicket(i) üzerine koydum. Lütfen bana kodumda nerede bir hata olduğunu tekrar söyleyebilir misiniz?

Saygılarımla, Vladimir.

pos_total nedir?

 
Alexey Viktorov #:

pos_total neye eşittir?

Merhaba Alexey, pos_total=PositionsTotal() değişkeni, ancak global düzeyde ayarlanmıştı. Şimdi onu fonksiyonun içine taşıdım ve sorunun bu olduğu ortaya çıktı. Her şey çalıştı. Sorun nedir? İşin püf noktasını hiç anlamadım!!!

Şimdi, deneme amacıyla pos_total'ı tekrar global seviyeye taşıdım ve tekrar çalışmayı durdurdu, ancak fonksiyonun içine koyduğumda olması gerektiği gibi çalışıyor! Sadece bazı mucizeler, en azından benim için!!!! )))

Global seviyedeki bir değişkenin bir fonksiyon tarafından başlatılamayacağı ortaya çıktı? Öyle mi?

Saygılarımla, Vladimir.