[UYARI, KONU KAPALI!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde. - sayfa 880

 
FoxUA :

evet, muhtemelen kendimi tam olarak ifade edemedim, BalansEURUSD'yi belirli bir anda yüzde olarak yüzde cinsinden hangi artı veya eksi ile ilgili veriye sahip olmak için değiştirmem gerekiyor "BalansEURUSD = 5%" bu şekilde

ve böylece birkaç çift için funene ve dolorena hakkında daha fazla şey söyleyelim

bir kere


bu daha zordur, ancak hesaplayabilirsiniz:

SAT emri için

kâr=NormalizeDouble((OrderOpenPrice()-Ask)*MarketInfo("EURUSD",MODE_TICKVALUE)*OrderLots()/Point,2);

margin=NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck("EURUSD",OP_SELL,OrderLots(),2);

satın almak için:

kâr=NormalizeDouble((Bid-OrderOpenPrice())*MarketInfo("EURUSD",MODE_TICKVALUE)*OrderLots()/Point,2);

margin=NormalizeDouble(AccountFreeMargin()-AccountFreeMarginCheck("EURUSD",OP_BUY,OrderLots(),2);

bunlar bir emrin karını hesaplamak için tam formüllerdir + bu sipariş için marj, marjın dikkate alınması gerekir, çünkü. sipariş kapatılırsa, serbest bırakılan marj bakiyeye eklenir, para miktarı artar, ancak gerçek kar olmayabilir

 

Beyler, lütfen bana bunu nasıl yapacağımı söyleyin, böylece bekleyen bir sipariş tetiklendiğinde başka bir sipariş verilir ?????? Seçim sırası ile çalışmayan bir şey denedim ........
sonrasında
sipariş türü == satın al, // burada satın alma işlemi bir satın alma durağıydı
bekleyen siparişi aç // (açılmaz)

 
VOLDEMAR :

Beyler, lütfen bana bunu nasıl yapacağımı söyleyin, böylece bekleyen bir sipariş tetiklendiğinde başka bir sipariş verilir ?????? Seçim sırası ile çalışmayan bir şey denedim ........
sonrasında
sipariş türü == satın al, // burada satın alma işlemi bir satın alma durağıydı
bekleyen siparişi aç // (açılmaz)


bir seçenek olarak, ilk akla gelen - tüm piyasa ve bekleyen emirler için döngüdeki seçim emri aracılığıyla, piyasada piyasa emirleri (al veya sat) olup olmadığına bakın, varsa bekleyen emir (önceden ayarlanmış) ) bir piyasa haline geldi, ardından bir sonrakini verin (ihtiyacınız olan başka bir bekleyen emir, örneğin: satın alma emri piyasadaysa, o zaman bir bystop koyun, vb.). okumanı tavsiye ederim -

alpari web sitesinde - forex eğitimi - tüccarın ders kitabı - otomatik ticaret MKL4 (panelin solunda) - ticaret danışmanları - (orderselect fonksiyonları, emir gönderme, koşullu operatörler, vb.)

http://www.alpari.ru/ru/school/textbook/autotrading/expert_advisors/ - kısa ve bilgilendirici...

 

Nasıl programlanacağını öğrenmeye çalışıyorum.Söyle bana, EA'da koşulun hiçbir zaman karşılanmadığından şüpheleniyorum.

while (B*Noktası >zmm)
Comment("Fark değeri", B);
OrderSend (Symbol(),OP_BUY,Lots,Ask,3,Bid-stoploss*Point,Ask+TakeProfit*Puan,"macd sample",16384,0,Yeşil);

Bu durum nasıl doğrulanabilir?Hangi yöntemler var? Ve boşta keneler ile mümkün mü?

 

Sevgili Uzmanlar! Danışman yazmayı öğreniyorum. Çalışır, ancak hepsi değil. Siparişleri değiştirme ve kapatma blokları çalışmıyor. Herhangi bir sebep bulamıyorum. Lütfen yardım et.

 //+------------------------------------------------------------------+
//|                                                Monetny dvor1.mq4 |
//|                                                            fanat |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "fanat"
#property link       "http://www.metaquotes.net"

extern int TakeProfit= 484 ; //
extern int StopLoss= 89 ;     //
extern bool BStop=true;     //Включение безубытка
extern int Stop= 90 ;         //            
//+------------------------------------------------------------
int start()
{ //1
   
if (TakeProfit< 10 ){ Alert ( "Ошибка,Take слишком близко" ); return ;}
if (StopLoss< 10 ){ Alert ( "Ошибка,StopLoss слишком близко" ); return ;}
   
bool Buy=false;
bool Sell=false;
if (Close[ 0 ]>High[ 1 ])Buy=true;
if (Close[ 0 ]<Low[ 1 ])Sell=true;

int err;
int Order_Count[ 6 ];
int OP=- 1 ;
ArrayInitialize (Order_Count, 0 );                             
         
for ( int i= 0 ;i<= OrdersTotal ();i++)       //
  { //2                                   // Блок учета ордеров
   if ( OrderSelect (i,SELECT_BY_POS)==true) //
    { //3                                 //
     Order_Count[OrderType()]++;         //
     if (OP!=- 1 ) return (Order_Count[OP]);   //
    } //3
  } //2  
     if ( OrdersTotal ()> 0 )
      { //2
       if (BStop==true&&OrderOpenPrice()!=OrderStopLoss())                                                 //Модификация ордеров
        { //3                                                                                             //
         if ((OrderType()== 0 &&(Ask-OrderOpenPrice())>Stop)||(OrderType()== 1 &&(OrderOpenPrice()-Bid)>Stop)) //
          { //4                                                                                           // 
           int ticket=OrderTicket();                                                                     // 
           double Price=OrderOpenPrice();                                                                 //
           double SL=OrderOpenPrice();                                                                   //
           double TP=OrderTakeProfit();                                                                   //
           bool Ans=OrderModify(ticket,Price,SL,TP, 0 );                                                   //
           
           if (Ans==false){err= GetLastError (); Alert (err); Sleep ( 500 ); return ;}                               //Обработка ошибок
          } //4
        } //3
          
                                                                                                                                                                                                                                                                                                                                       // 
       if (OrderType()== 1 &&(Buy==true||Ask<OrderTakeProfit()||Bid>OrderStopLoss()))       //Условия закрытия ордеров Sell  
        { //3
         ticket=OrderTicket();                             //Закрытие ордеров Sell                                                                         
         double Lots=OrderLots();                           //
         OrderClose(ticket,Lots,Ask, 4 );                     //
         
         err= GetLastError ();                               //Обработка ошибок 
         if (err> 0 ){ Alert (err); Sleep ( 500 ); return ;}           //                                                                              
        } //3
                                                           
       if (OrderType()== 0 &&(Sell==true||Bid>OrderTakeProfit()||Ask<OrderStopLoss()))       //Условия закрытие ордеров Buy 
       { //3
         ticket=OrderTicket();                             //Закрытие ордеров Buy                   
         Lots=OrderLots();                                 //  
         OrderClose(ticket,Lots,Bid, 4 );                     //
          
         err= GetLastError ();                               //Обработка ошибок
         if (err> 0 ){ Alert (err); Sleep ( 500 ); return ;}           //
       } //3
      } //2 
                   
   if (Buy==false&&Sell==false) return ;
   int Total= 1 ;
   double Lot= 0.03 ;                 
/*  if(AccountBalance()>400)Lot=0.04;          //
   if(AccountBalance()>500)Lot=0.05;          //
   if(AccountBalance()>600)Total=2;           //
   if(AccountBalance()>800)Lot=0.04;Total=2;  // Блок вычисления лота для реала
   if(AccountBalance()>1000)Lot=0.05;Total=2; //
   if(AccountBalance()>1200)Lot=0.04;Total=3; //
   if(AccountBalance()>1500)Lot=0.05;Total=3; //
   if(AccountBalance()>1600)Lot=0.04;Total=4; //
   if(AccountBalance()>1800)Lot=0.03;Total=6;*/ //
   
   Lot= 0.1 ;
   if (AccountBalance()> 1600 )Lot= 0.2 ;
   if (AccountBalance()> 2400 )Lot= 0.3 ;
                                                                                      
   if (Order_Count[OP_BUY]<Total&&Order_Count[OP_SELL]== 0 &&Buy==true)                     //Открытие ордеров Buy
   { //2                                                                                  //
       OrderSend ( Symbol (), OP_BUY, Lot, Ask, 4 , Ask-StopLoss* Point , Ask+TakeProfit* Point ); //
       
      err= GetLastError ();                                                                 //Обработка ошибок
       if (err> 0 ){ Alert (err); Sleep ( 500 );}                                                   //
       return ;
   } //2         
           
   if (Order_Count[OP_SELL]<Total&&Order_Count[OP_BUY]== 0 &&Sell==true)                     //Открытие ордеров Sell 
   { //2                                                                                   //
       OrderSend ( Symbol (), OP_SELL, Lot, Bid, 4 , Bid+StopLoss* Point , Bid-TakeProfit* Point ); //
      
      err= GetLastError ();                                                                 //Обработка ошибок
       if (err> 0 ){ Alert (err); Sleep ( 500 );}                                                   //
   } //2
  
return ;
} //1

Yardım.

 
fanat :

Sevgili Uzmanlar! Danışman yazmayı öğreniyorum. Çalışır ama hepsi değil. Siparişleri değiştirme ve kapatma blokları çalışmıyor. Hiçbir sebep bulamıyorum. Lütfen yardım et.

Yardım.


Belki de fonksiyonlarla tanışmanın zamanı gelmiştir?
 

işte sorun:

MathSrand( ZamanYerel() );

int periodRandom=period+ MathRand()/10000;
int period2Random=period2+ MathRand()/10000;

Moving1=iMA(Symbol(),0,periodRandom,0,MODE_SMA,price,1) ;

Moving2=iMA(Symbol(),0,period2Random,0,MODE_SMA,fiyat,1);

Kenelerin periyodunu rastgele değiştirmeye karar verdim - periyot artı 0'dan 3'e rastgele bir değer.

ancak test cihazında, çalıştırma her zaman aynı miktarda kâr gösterir. Belki dönem değişmez, Neyi yanlış kodladım?

 

Güzel gün! Soru basit: iki boyutlu bir dizinin ikinci boyutunu bir sabit aracılığıyla değil de bir şekilde ayarlamak mümkün müdür?

Yani şunu yapmanız gerekiyor: double masiv[5][5] ve ben double masiv[5][k] istiyorum, burada k daha önce belirtilen bilinen bir tamsayı değeridir, örneğin extern int k = 5 aracılığıyla. İlk boyut ArrayResize işleviyle değiştirilebilir, ancak nedense ikincisini değiştiremezsiniz...

 
fru1t :

Güzel gün! Soru basit: iki boyutlu bir dizinin ikinci boyutunu bir sabit aracılığıyla değil de bir şekilde ayarlamak mümkün müdür?

Yani şunu yapmanız gerekiyor: double masiv[5][5] ve ben double masiv[5][k] istiyorum, burada k daha önce belirtilen bilinen bir tamsayı değeridir, örneğin extern int k = 5 aracılığıyla. İlk boyut ArrayResize işleviyle değiştirilebilir, ancak nedense ikincisini değiştiremezsiniz...


#define k 5

 

https://docs.mql4.com/en/basis/preprosessor/constant

 

Merhaba bilenler.

Lütfen, sol üstteki göstergeler alt penceresinden bilgilerin nasıl kaldırılacağını açıklayın.

müdahale eder.