Kısacası, burada anlatılan sorunu farklı bir şekilde çözdüm:
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
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);
}
}
}
}
//+------------------------------------------------------------------+
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?
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?
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?
Ş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
Ş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.
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...
İ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. ((((
Saygılarımla, Vladimir.
Hata = "
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:
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:
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.
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?
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.