[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 3. - sayfa 46

 
rustein :

soru tam olarak nerede
 
ilunga :
soru tam olarak nerede
https://www.mql5.com/ru/forum/115354/page78
 

verdiğiniz kodda, sadece 1 sipariş varsa, o zaman döngü

 for (;Cnt>= 0 ;Cnt--)
    {
       RefreshRates ();
       OrderSelect (Cnt,SELECT_BY_POS);
       if ( OrderMagicNumber ()==Magic)
      {
      TotalOpenOrders++;
      }
    }

2 kez uygulanacaktır. ilk kez var olmayan bir sipariş seçme girişimi olacak

 
ilunga :

verdiğiniz kodda, sadece 1 sipariş varsa, o zaman döngü

2 kez uygulanacaktır. ilk kez var olmayan bir sipariş seçme girişimi olacak

Teşekkürler, kendim düzelteceğim.
 
artmedia70 :
Terminal derin düşüncelere daldı, 15 dakika sonra öldürdüm
hiçlik...
Bir dakika bile beklemeden öldürürdüm.
 
PapaYozh :

Sor ve Bid'i kullanmadan hemen önce RefreshRates() 'i çalıştırın.


denedim değişen bir şey yok

Sipariş gönderme işlevi, her şey standart görünüyor

 int OpenPosition( string AdvisorName, int Position, int Magic, double Lots, double StopLoss){ 
 int N; int Сount = 5 ; int Slippage = (CalculateSpread() * 2 ); 
 string PeriodString = GetPeriod( Period ());
 if (Position == OP_BUY){ double Price = NormalizeDouble (Ask, Digits ); 
 string OrderName = " - Покупка по рынку" ;
 string ErrorName = "Ошибка открытия ордера на покупку" ;
 string CriticalErrorName = "Невозможно открыть ордер на покупку" ;
 string MailCriticalErrorName = "Ошибка открытия" ; color Arrow = Gold ;}
 if (Position == OP_SELL){Price = NormalizeDouble (Bid, Digits ); 
 OrderName = " - Продажа по рынку" ; ErrorName = "Ошибка открытия ордера на продажу" ;
 CriticalErrorName = "Невозможно открыть ордер на продажу" ;
 MailCriticalErrorName = "Ошибка открытия" ; Arrow = YellowGreen ;}
 
 while ( IsTradeContextBusy () || ! IsTradeAllowed ()){ int Interval = MathRand ()+ 1000 ; 
 Print ( "Торговый поток занят. Повторная проверка через " + DoubleToStr ((Interval/ 1000 ), 0 )+ " сек" ); 
 Sleep (Interval);} RefreshRates (); while (N < Сount){ RefreshRates (); 
 int Ticket = OrderSend ( Symbol (),Position,Lots,Price,Slippage,StopLoss, 0 ,AdvisorName+
 OrderName,Magic, 0 ,Arrow);
 if (Ticket > 0 ){ if ( OrderSelect (Ticket,SELECT_BY_TICKET,MODE_TRADES)){ int Flag = 1 ; 
 PlaySound ( "recharge.wav" ); break ;}}
 else {Flag = 0 ; int PRM = GetLastError (); string ERR = Error(PRM, "OrderSend()" ); 
 ErrorProcessing(AdvisorName+ " " +PeriodString,ErrorName+ " " +PRM+ " (" +
 Error(PRM, "OrderSend()" )+ ")" , "" , "OrderSend()" ); N++; Sleep ( 5000 );}
 if (N == Сount){ErrorProcessing(AdvisorName+ " " +PeriodString,CriticalErrorName,
 MailCriticalErrorName+ " " +PRM+ " (" +Error(PRM, "OrderSend()" )+ ")" , "OrderSend()" );}}
 return (Flag);}
 
Dimoncheg :


denedim değişen bir şey yok

Sipariş gönderme işlevi, her şey standart görünüyor


Önce fiyatları RefreshRates() işleviyle güncellersiniz ve gerekli olanı Fiyat'ta saklarsınız.

Ardından Sleep(Interval) komutunu çalıştırırsınız ve bu sırada tırnak işaretleri değişir.

Bundan sonra, geçen yıldan bir alıntıyla OrderSend()'i çağırırsınız .

Soru şu ki, karşılığında ne almayı umuyorsunuz?

 
PapaYozh :


Önce fiyatları RefreshRates() işleviyle güncellersiniz ve gerekli olanı Fiyat'ta saklarsınız.

Ardından Sleep(Interval) komutunu çalıştırırsınız ve bu sırada tırnak işaretleri değişir.

Bundan sonra, geçen yıldan bir alıntıyla OrderSend()'i çağırırsınız.

Soru şu ki, karşılığında ne almayı umuyorsunuz?


Sövede, biraz yanlış yerde modernize edilmiş, şimdi fonksiyonun sınırlarını aşan fiyat kaldırma işlemini yaptım.

OpenPosition( "Sovetneg" ,OP_BUY, NormalizeDouble (Ask, Digits ),Magic,SlowlyIncreasingLots( 0.2 ),MultiStop(OP_BUY,StopLoss));
Fonksiyonun kendisi şimdi
 int OpenPosition( string AdvisorName, int Position, double Price, int Magic, double Lots, double StopLoss){ 
 int N; int Сount = 5 ; int Slippage = (CalculateSpread() * 2 ); 
 string PeriodString = GetPeriod( Period ());
 if (Position == OP_BUY){
 string OrderName = " - Покупка по рынку" ;
 string ErrorName = "Ошибка открытия ордера на покупку" ;
 string CriticalErrorName = "Невозможно открыть ордер на покупку" ;
 string MailCriticalErrorName = "Ошибка открытия" ; color Arrow = Gold ;}
 if (Position == OP_SELL){
 OrderName = " - Продажа по рынку" ; ErrorName = "Ошибка открытия ордера на продажу" ;
 CriticalErrorName = "Невозможно открыть ордер на продажу" ;
 MailCriticalErrorName = "Ошибка открытия" ; Arrow = YellowGreen ;}
 
 while ( IsTradeContextBusy () || ! IsTradeAllowed ()){ int Interval = MathRand ()+ 1000 ; 
 Print ( "Торговый поток занят. Повторная проверка через " + DoubleToStr ((Interval/ 1000 ), 0 )+ " сек" ); 
 Sleep (Interval);} while (N < Сount){ RefreshRates (); 
 int Ticket = OrderSend ( Symbol (),Position,Lots,Price,Slippage,StopLoss, 0 ,AdvisorName+
 OrderName,Magic, 0 ,Arrow);
 if (Ticket > 0 ){ if ( OrderSelect (Ticket,SELECT_BY_TICKET,MODE_TRADES)){ int Flag = 1 ; 
 PlaySound ( "recharge.wav" ); break ;}}
 else {Flag = 0 ; int PRM = GetLastError (); string ERR = Error(PRM, "OrderSend()" ); 
 ErrorProcessing(AdvisorName+ " " +PeriodString,ErrorName+ " " +PRM+ " (" +
 Error(PRM, "OrderSend()" )+ ")" , "" , "OrderSend()" ); N++; Sleep ( 5000 );}
 if (N == Сount){ErrorProcessing(AdvisorName+ " " +PeriodString,CriticalErrorName,
 MailCriticalErrorName+ " " +PRM+ " (" +Error(PRM, "OrderSend()" )+ ")" , "OrderSend()" );}}
 return (Flag);}
Şimdi doğru görünüyor mu?
 

Merhaba.

Bana türün == 4'ün ne anlama geldiğini söyleme

ve tip==5

aşağıdaki snippet'te:

double ma=iMA(Symbol(), PERIOD_D1,21,0 ,MODE_SMA,PRICE_CLOSE,0);

for(int k=1; k<=SiparişToplam(); k++)
bool select=SiparişSeç(k-1,SELECT_BY_POS);

eğer(seç)
{
inttype=SiparişTürü();
int bilet=OrderTicket();

if (Teklif<ma && type==4)
OrderDelete(bilet);
if (Teklif>ma && type==5)
OrderDelete(bilet);
}

Siparişleri silme koşullarının ma tarafından anlaşılabilir olduğunu anlıyorum, ancak birlikte nasıl?

Teşekkür ederim.

 
Dimoncheg :


Şimdi doğru görünüyor mu?


Hayır, doğru değil. Daha da kötü oldu :)

Anlayın, RefreshRates() önceden tanımlanmış Ask ve Bid değişkenlerinin değerlerini günceller, değeri Price değişkeninde depoladıktan sonra kullanırsınız.

Neden: