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

 
solnce600 :

Hepinize iyi günler!

ben acemiyim İlk kez fikri test cihazında koda çevirmeye çalışıyorum.

Fikir basit - her saatlik mumun açılış fiyatında, dönüşümlü olarak yukarı ve aşağı bir sipariş açın.

Basit bir kod yazdım .... ama sorun şu ki bir mum açılışında program bazen nedense 1'den fazla sipariş açıyor.

Bana öyle geliyor ki, 1 saniye içinde 1'den fazla tik geldiğinde bu oluyor.

Bir seçenek olarak, koşul başlığını if ( ) ..

SiparişlerToplam ( )==0

sadece bir sipariş aslında açılır.



Ama bu seçenek bana uymuyor çünkü ertesi gün bu mum açılmıyor çünkü bu mumu açma anında

ticarette zaten farklı rastgele sayıda emir var.

OrderSend(Symbol(),OP_BUY,0.1,Price,3,SL,TP); satırından sonra da denedim. start() yürütmesini geri dönüşle kesintiye uğratın; .... Yardım etmedi.


1 saniye içerisinde herhangi bir tikte sadece 1 siparişin açılmasını nasıl yapacağımı söylerseniz herkese minnettar olurum.

int başlangıç()

{
çift Fiyat=Sor;
çift SL=Fiyat-300*Puan;
çift TP=Fiyat+300*Puan;
if( Hour()==10 && Minute()== 00 && Seconds()==00)
OrderSend(Symbol(),OP_BUY,0.1,Fiyat,3,SL,TP);
}

Bu seçeneği deneyin:
 int TimeNow, TimePrev, PrevType;

int start()   
 {
   double Price,SL,TP;
     int Ticket;

  TimeNow=iTime( NULL , 0 , 0 );
   if (TimePrev==TimeNow) return ( 0 );

   if (PrevType!= 1 ) {
   Price= NormalizeDouble (Ask, Digits );    
   SL= NormalizeDouble (Price- 300 * Point , Digits );    
   TP= NormalizeDouble (Price+ 300 * Point , Digits );
   Ticket= OrderSend ( Symbol (),OP_BUY, 0.1 ,Price, 3 ,SL,TP);
   if (Ticket!=- 1 ) { TimePrev=TimeNow; PrevType= 1 ; } }

   else if (PrevType!=- 1 ) {
   Price= NormalizeDouble (Bid, Digits );    
   SL= NormalizeDouble (Price+ 300 * Point , Digits );    
   TP= NormalizeDouble (Price- 300 * Point , Digits );
   Ticket= OrderSend ( Symbol (),OP_SELL, 0.1 ,Price, 3 ,SL,TP);
   if (Ticket!=- 1 ) { TimePrev=TimeNow; PrevType=- 1 ; } }
 }
 
alsu :


Hızlı cevap için çok teşekkür ederim.Memnun oldum.
 
Diubakin :
Bu seçeneği deneyin:
Hızlı cevap için çok teşekkür ederim.Çok memnun kaldım.
 
SW. profesyonel! Manuel modda çalışan CloseBy() işlevini nerede bulabilirim? Baykuşlarıma yerleştirmek istiyorum, böylece manuel olarak değil, koşullara göre otomatik olarak, bir pozisyonu maksimum eksi ile maksimum artı ile kapatmak mümkün olur. Codebase'de bulamadım. Teşekkür ederim!
 
borilunad :
SW. profesyonel! Manuel modda çalışan CloseBy() işlevini nerede bulabilirim? Baykuşlarıma yerleştirmek istiyorum, böylece manuel olarak değil, koşullara göre otomatik olarak, bir pozisyonu maksimum eksi ile maksimum artı ile kapatmak mümkün olur. Codebase'de bulamadım. Teşekkür ederim!

Bu seçeneği deneyin:

 bool LockOFF( int EA_Magic) {
 double Result, PrevLoss, PrevProfit;
     int pos, orders_total, order_type, MaxProfitTicket, MaxLossTicket;
   bool Ans;

 MaxProfitTicket=- 1 ; MaxLossTicket=- 1 ;

 orders_total= OrdersTotal ();
 for (pos=orders_total- 1 ; pos>= 0 ; pos--) {
   if (! OrderSelect (pos, SELECT_BY_POS, MODE_TRADES)) continue ;
   if (OrderSymbol()!= Symbol () || OrderMagicNumber()!=EA_Magic) continue ; // не наш ордер
   if (OrderType()> 1 ) continue ;
  Result=OrderProfit()+OrderSwap()+OrderCommission();
   if (Result< 0.0 && (PrevLoss== 0.0 || Result<PrevLoss)) {
   PrevLoss=Result; MaxLossTicket=OrderTicket(); order_type=OrderType(); } } // end of for

 if (MaxLossTicket==- 1 ) return ( false ); // нет убыточной позиции
 if (order_type==OP_BUY) order_type=OP_SELL; else order_type=OP_BUY; 

 orders_total= OrdersTotal ();
 for (pos=orders_total- 1 ; pos>= 0 ; pos--) {
   if (! OrderSelect (pos, SELECT_BY_POS, MODE_TRADES)) continue ;
   if (OrderSymbol()!= Symbol () || OrderMagicNumber()!=EA_Magic) continue ; // не наш ордер
   if (order_type!=OrderType()) continue ;
  Result=OrderProfit()+OrderSwap()+OrderCommission();
   if (Result> 0.0 && (PrevProfit== 0.0 || Result>PrevProfit)) {
   PrevProfit=Result; MaxProfitTicket=OrderTicket(); } } // end of for

 if (MaxProfitTicket==- 1 ) return ( false ); // нет противоположной прибыльной позиции

 Ans=OrderCloseBy(MaxLossTicket, MaxProfitTicket);
 if (!Ans) { Print ( "Ошибка при встречном закрытие" ); return ( false ); }
 
 return ( true ); }
 

Sergei, bir bakışta ayakta! Her şeyi mahvedeceğim, koşulları hazırlayacağım ve deneyeceğim. Çok teşekkürler!

Denedim, hatasız çalışıyor! Şimdi sadece koşullarla deney yapın, böylece bir anlam ve düzen olacak! Ama o yarın!

Çok teşekkürler! Ve ilginç rüyalar!

 
borilunad :
Sergei, bir bakışta ayakta! Her şeyi mahvedeceğim, koşulları hazırlayacağım ve deneyeceğim. Çok teşekkürler!
Sadece bir karşı kapama komutu yerine, tam teşekküllü bir karşı kapama fonksiyonu ekleyin - aksi halde bu sadece test cihazı içindir. Ve fonksiyondaki değişkenleri başlatın.
 
artmedia70 :
Sadece bir karşı kapama komutu yerine, tam teşekküllü bir karşı kapama fonksiyonu ekleyin - aksi halde bu sadece test cihazı içindir. Ve fonksiyondaki değişkenleri başlatın.
Teşekkürler Artyom! Çok geçti. Bugün her şeyi çevrimiçi kurallarına göre yapacağım!
 
borilunad :
Teşekkürler Artyom! Çok geçti. Bugün her şeyi çevrimiçi kurallarına göre yapacağım!
İyi şanlar...
 

Tünaydın. Böyle bir soru var.

Göstergeyi diğer uzmanların ve hindilerin kod parçalarından büyük zorluklarla kendim için yeniden yaptım. Kod büyük değil, her şey istediğim gibi yapılıyor.

Gerçek şu ki, kendi içinde hesaplamalar yapıyor ve grafikte yukarı veya aşağı ok gösteriyor.

Bana nasıl bir uzman yapabileceğinizi söyleyin, böylece grafikte bir ok göründüğünde, doğru yönde bir sipariş açılır.

Daha doğrusu, şu anda hangi okun aktif olduğunu bilmem gerekiyor, gerisini yapabileceğimi düşünüyorum.

Daha açık hale getirmek için bir kod parçası vereceğim, bu göstergedeki başlatma

   SetIndexBuffer(1, Vverh);

   SetIndexStyle(1,DRAW_ARROW);

   SetIndexArrow(1,233);

   

   SetIndexBuffer(2,Vniz);

   SetIndexStyle(2,DRAW_ARROW);

   SetIndexArrow(2,234); 

herkese şimdiden teşekkürler