sadece bir ekleme, terminalin yeterli geçmişe sahip olduğu ve oluşturacağı GARANTİ EDİLMEZ.
yukarıdaki örnekte tarihe referans yok
bu nedenle OrderSelect() sonucunun doğru olup olmayacağı garanti edilir
UPD: OrderSelect 4-ke'de çok iyi çalışıyor, bir kez test ettim - piyasa emirleri için, emir özelliklerine erişim zamanı .... saniyede gerçekten milyonlarca kez, arama yapmak istemiyorum, tartışıyormuşum gibi görünüyor moderatör Artem ile, ama burada dedikleri gibi, "tüm keçeli kalemlerin tadı farklıdır", isterseniz - kalsın
@Igor Makanu , terminalde sipariş sıralama konusundaki cevaplarınız için çok teşekkür ederim. Muhtemelen onları bir dizi yapı olarak kaydedeceğim ve kendim sıralayacağım. Şüpheler, temel olarak, her kene üzerinde gerçekleştirilen bu tür eylemlerin performans üzerinde gözle görülür bir olumsuz etkisi olacağından korkmamdan kaynaklanıyordu.
Janis Ozols : @Igor Makanu , terminalde sipariş sıralama konusundaki cevaplarınız için çok teşekkür ederim. Muhtemelen onları bir dizi yapı olarak kaydedeceğim ve kendim sıralayacağım. Şüpheler, temel olarak, her kene üzerinde gerçekleştirilen bu tür eylemlerin performans üzerinde gözle görülür bir olumsuz etkisi olacağından korkmamdan kaynaklanıyordu.
Öyleyse neden her keneyi sıralayasınız? Sadece kayıt sayısını değiştirirken veya listeyi tamamen değiştirirken yeterlidir ...
bu nedenle OrderSelect() sonucunun doğru olup olmayacağı garanti edilir
UPD: OrderSelect 4-ke'de çok iyi çalışıyor, bir kez test ettim - piyasa emirleri için, emir özelliklerine erişim zamanı .... saniyede gerçekten milyonlarca kez, arama yapmak istemiyorum, tartışıyormuşum gibi görünüyor moderatör Artem ile, ama burada dedikleri gibi, "tüm keçeli kalemlerin tadı farklıdır", isterseniz - kalsın
voidOnTick ()
{
if (isCrossing() == 1 )
...
if (isCrossing() == 2 )
...
}
int isCrossing(){
double ma = iMA ( NULL , g_timeFrame, g_maPeriod, g_maShift, g_maMethod, g_maApplietPrice, 0 );
double low = iLow ( Symbol (), g_timeFrame, 0 );
double high = iHigh ( Symbol (), g_timeFrame, 0 );
if (g_barTime < iTime ( NULL ,g_timeFrame, 0 ) && high > ma && Bid <= ma){
g_barTime = iTime ( NULL ,g_timeFrame, 0 );
return1 ;
}
if (g_barTime < iTime ( NULL ,g_timeFrame, 0 ) && low < ma && Bid >= ma){
g_barTime = iTime ( NULL ,g_timeFrame, 0 );
return2 ;
}
return0 ;
}
isCrossing() neden 2 döndürmüyor ??? IsCrossing() 'in kendisinin ikinci if için bir girişi vardır, ancak OnTick() 'in isCrossing() == 2 olduğunda if öğesine bir girişi yoktur. Ne oluyor be...
sadece bir ekleme, terminalin yeterli geçmişe sahip olduğu ve oluşturacağı GARANTİ EDİLMEZ.
yukarıdaki örnekte tarihe referans yok
bu nedenle OrderSelect() sonucunun doğru olup olmayacağı garanti edilir
UPD: OrderSelect 4-ke'de çok iyi çalışıyor, bir kez test ettim - piyasa emirleri için, emir özelliklerine erişim zamanı .... saniyede gerçekten milyonlarca kez, arama yapmak istemiyorum, tartışıyormuşum gibi görünüyor moderatör Artem ile, ama burada dedikleri gibi, "tüm keçeli kalemlerin tadı farklıdır", isterseniz - kalsın
merhaba, her işlem için bir düşüş verisine ihtiyaç vardır.
Belki birisi bu tür istatistikleri toplayan ve bunu bir rapor olarak veren bir komut dosyasıyla karşılaştı?
Teşekkür ederim
merhaba, her işlem için bir düşüş verisine ihtiyaç vardır.
Belki birisi bu tür istatistikleri toplayan ve bunu bir rapor olarak veren bir komut dosyasıyla karşılaştı?
Teşekkür ederim
for(int i=OrdersTotal()-1;i>=0;i--) {
if (!OrderSelect(i,SELECT_BY_POSITON,MODE_TRADES)) continue;
double prosad=DBL_MIN;
if (OrderType()!=OP_BUY && OrderType!=OP_SELL) continue;
for(int j=iBarShift(OrderSymbol(),OrderOpenTime(),PERIOD_M1); j>=0;j--) {
double delta=( OrderType()==OP_BUY? OrderOpenPrice()-iLow(OrderSymbol(),PERIOD_M1,j) : iHigh(OrderSymbol(),PERIOD_M1,j)-OrderOpenPrice() );
delta /= MarketInfo(OrderSymbol(),MODE_POINT);
if (delta>prosad) prosad=delta;
}
PrintFormat("Максимальная просадка по ордеру %d = %d пунктов , %f денег",OrderTicket(),(int)(prosad),prosad*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE);
}
"elle" yazılmış, kontrol edilmemiş, hatalarla dolu :-) ihtiyaçlarınıza ve kullanımınıza uyacak şekilde ince ayar yapın
for(int i=OrdersTotal()-1;i>=0;i--) {
if (!OrderSelect(i,SELECT_BY_POSITON,MODE_TRADES)) continue;
double prosad=DBL_MIN;
if (OrderType()!=OP_BUY && OrderType!=OP_SELL) continue;
for(int j=iBarShift(OrderSymbol(),OrderOpenTime(),PERIOD_M1); j>=0;j--) {
double delta=( OrderType()==OP_BUY? OrderOpenPrice()-iLow(OrderSymbol(),PERIOD_M1,j) : iHigh(OrderSymbol(),PERIOD_M1,j)-OrderOpenPrice() );
delta /= MarketInfo(OrderSymbol(),MODE_POINT);
if (delta>prosad) prosad=delta;
}
PrintFormat("Максимальная просадка по ордеру %d = %d пунктов , %f денег",OrderTicket(),(int)(prosad),prosad*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE);
}
"elle" yazılmış, kontrol edilmemiş, hatalarla dolu :-) ihtiyaçlarınıza ve kullanımınıza uyacak şekilde ince ayar yapın
Teşekkürler, anlamaya çalışacağım!
@Igor Makanu , terminalde sipariş sıralama konusundaki cevaplarınız için çok teşekkür ederim. Muhtemelen onları bir dizi yapı olarak kaydedeceğim ve kendim sıralayacağım. Şüpheler, temel olarak, her kene üzerinde gerçekleştirilen bu tür eylemlerin performans üzerinde gözle görülür bir olumsuz etkisi olacağından korkmamdan kaynaklanıyordu.
Öyleyse neden her keneyi sıralayasınız? Sadece kayıt sayısını değiştirirken veya listeyi tamamen değiştirirken yeterlidir ...
yukarıdaki örnekte tarihe referans yok
bu nedenle OrderSelect() sonucunun doğru olup olmayacağı garanti edilir
UPD: OrderSelect 4-ke'de çok iyi çalışıyor, bir kez test ettim - piyasa emirleri için, emir özelliklerine erişim zamanı .... saniyede gerçekten milyonlarca kez, arama yapmak istemiyorum, tartışıyormuşum gibi görünüyor moderatör Artem ile, ama burada dedikleri gibi, "tüm keçeli kalemlerin tadı farklıdır", isterseniz - kalsın