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

 
PapaYozh :


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.


Anladım :-) Bu fonksiyondaki yürütme OrderSend'e ulaştığında Price'a erişildiğini düşündüm.

 int OpenPosition( string AdvisorName, int Position, int Magic, double Lots, double StopLoss){ 
 int N; int Сount = 5 ; int Slippage = (CalculateSpread() * 2 ); double Price;
 string PeriodString = GetPeriod( Period ());
 if (Position == OP_BUY){
 string OrderName = StringConcatenate (AdvisorName, " - Покупка по рынку" );
 string ErrorName = "Ошибка открытия ордера на покупку" ;
 string CriticalErrorName = "Невозможно открыть ордер на покупку" ;
 string MailCriticalErrorName = "Ошибка открытия" ; color Arrow = Gold ;}
 if (Position == OP_SELL){
 OrderName = StringConcatenate (AdvisorName, " - Продажа по рынку" ); ErrorName = "Ошибка открытия ордера на продажу" ;
 CriticalErrorName = "Невозможно открыть ордер на продажу" ;
 MailCriticalErrorName = "Ошибка открытия" ; Arrow = YellowGreen ;}
 
 while ( IsTradeContextBusy () || ! IsTradeAllowed ()){ int Interval = MathRand ()+ 1000 ; 
 Print ( "Торговый поток занят. Повторная проверка через " + DoubleToStr ((Interval/ 1000 ), 0 )+ " сек" ); 
 Sleep (Interval);} while (N < Сount){
 if (Position == OP_BUY){ RefreshRates (); Price = NormalizeDouble (Ask, Digits );}
 if (Position == OP_SELL){ RefreshRates (); Price = NormalizeDouble (Bid, Digits );}
 int Ticket = OrderSend ( Symbol (),Position,Lots,Price,Slippage,StopLoss, 0 ,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);}
Eh, şu anda, doğru görünüyor, değil mi?)))
 
Dimoncheg :


Anladım :-) Bu fonksiyondaki yürütme OrderSend'e ulaştığında Price'a erişildiğini düşündüm.

Eh, şu anda, doğru görünüyor, değil mi?)))


Evet gibi.
 
int BlackOrWhite( int countbar)
{
int result_= 0 ;
 
if ( iClose ( NULL , 0 ,countbar)- iOpen ( NULL , 0 ,countbar))
result_= 1 ;
else
result_=- 1 ;
 
if ( iOpen ( NULL , 0 ,countbar)== iClose ( NULL , 0 ,countbar))
result_= 0 ;
 
return (result_);
}

işlevi, bir nedenden dolayı yalnızca bir değer verir + derleyici yemin eder:

' iClose ' - karşılaştırma ifadesi bekleniyor

Sorunun ne olduğunu anlamıyorum.

 if (BlackOrWhite( 1 )> 0 )
      {
bu yüzden programda kullanıyorum.
 
nuan :

işlevi, bir nedenden dolayı yalnızca bir değer verir + derleyici yemin eder:

'iClose' - karşılaştırma ifadesi bekleniyor

Sorunun ne olduğunu anlamıyorum.

bu yüzden programda kullanıyorum.



 if ( iClose ( NULL , 0 ,countbar)- iOpen ( NULL , 0 ,countbar)> 0 )
   result_= 1 ;
else
   result_=- 1 ;

ya da öyle

 if ( iClose ( NULL , 0 ,countbar)> iOpen ( NULL , 0 ,countbar))
   result_= 1 ;
else
   result_=- 1 ;
 
PapaYozh :

Evet gibi.

Her şey çalışıyor gibi görünüyor, teşekkürler
 
Çok teşekkürler.
 

Merhaba. Yardıma ihtiyacım var. Soru şu:

Sipariş çalıştıktan sonra, diğer tüm siparişleri nasıl kapatmanız gerektiği önemli değildir. Ve yine duruma göre yenileri açılmalı.

 
sergey_r :

Merhaba. Yardıma ihtiyacım var. Soru şu:

Sipariş çalıştıktan sonra, diğer tüm siparişleri nasıl kapatmanız gerektiği önemli değildir. Ve yine duruma göre yenileri açılmalı.


Buradaki öğreticiyi okudunuz mu?
 

şimdiye kadar kullandım

statik bool order_opened = false;

if(order_opened){return(0);}

OrderSend(Symbol(),OP_BUYLIMIT,0.1,cena_buy,3,sl_buy,tp_buy,"",14774,0,Mavi);
Uyarı(GetLastError()); //Sipariş verirken hata mesajı
order_opened = doğru; // sipariş işe yaradıysa, artık açmayın

Şimdi bu sipariş çalıştıktan sonra tekrar yeni bir sipariş açmanız gerekiyor.

 
sergey_r :

şimdiye kadar kullandım

statik bool order_opened = false;

if(order_opened){return(0);}

OrderSend(Symbol(),OP_BUYLIMIT,0.1,cena_buy,3,sl_buy,tp_buy,"",14774,0,Mavi);
Uyarı(GetLastError()); //Sipariş verirken hata mesajı
order_opened = doğru; // sipariş işe yaradıysa, artık açmayın

Şimdi bu sipariş çalıştıktan sonra tekrar yeni bir sipariş açmanız gerekiyor.



Öğreticiyi ve belgeleri okuyun, poz durumuna göre açma, kapama mantığını değiştirin, CTRL+ALT+M ile kodu yapıştırın .