Biraz yardım gerekli - sayfa 8

 
qgmql :

Bu kod tamam mı? değilse, lütfen bağlantı yerine bir kod yazın, hala kafam karıştı.


HAYIR https://www.mql5.com/en/forum/133792/page3#550831

belirli bir sembol üzerinde işlem gören bir lot için pip değeri verir

 

1. Açılan bazı alış emirleri vardır ve bir adet bekleyen alış emri verilir. tüm siparişler aynı döviz çiftindedir . Bir EA, stop limitlerini kontrol etmek için yalnızca son açılan siparişi nasıl seçecek?

2. Açılan her emir, tp 20 ile farklı fiyatlardan verildi. Sonuncusu hariç, açılan tüm emirleri değiştirmek ve stop limitlerini, son açılan emrin stop limitleri ile değiştirmek mümkün müdür?

MİSAL:

Sr    type   price     tp
1      buy     1.23950    1.23750
------------------------------
# buylimit   1.23750    1.23550

//////////////////////////////

1     buy     1.23950    1.23550 // tp modified and now equal to 2nd tp
2     buy     1.23750    1.23550 // 2nd tp
------------------------------
# buylimit   1.23550    1.23350

//////////////////////////////

1     buy     1.23950    1.23350 // tp modified and now equal to 3rd tp
2     buy     1.23750    1.23350 // tp modified and now equal to 3rd tp
3     buy     1.23550    1.23350 // 3rd tp
------------------------------
# buylimit   1.23350    1.23150
 

İle biraz karışıklık ...

 //Signal Filter
#define XXX   0
#define AAA   1
#define BBB   2

int SignalS = XXX;

if (SignalS & AAA != 0 )
OrderSend ( NULL , OP_BUY , LotSize, Ask , Slippage, SL, TP, WindowExpertName (), MagicID, 0 , Blue);

Eski düzenleyici vurgulanan satırları kabul ediyor, ancak yeni düzenleyici "İfade boolean değil" uyarısı veriyor

sonra denedim...

 if (SignalS && AAA != 0 )
//or
if (SignalS != 0 & AAA != 0 )

Şimdi yeni düzenleyici ikisini de kabul ediyor, ama... hangisi vurgulanan satırla aynı şekilde çalışacak? ikisi de doğruysa hangisini kullanmalıyım? ( daha uygun? )

Not: Aşağıdaki kod yeni editör tarafından da kabul edilmiştir...

 if ((SignalS & AAA) != 0 )

Yeni düzenleyici üçünü de kabul ediyor, ancak... hangisi vurgulanan satırla aynı şekilde çalışacak? hepsi doğruysa, hangisi benim için daha uygun olacak?

 
qgmql : Yeni düzenleyici üçünü de kabul ediyor, ancak... hangisi vurgulanan satırla aynı şekilde çalışacak? hepsi doğruysa, hangisi benim için daha uygun olacak?
  1. Biraz maske kullanmayın
     //Signal Filter
    #define XXX   0
    #define AAA   1
    #define BBB   2
    
    int SignalS = XXX;
    
    if (SignalS & AAA != 0 )
     enum eSignals = {XXX, AAA, BBB};
    
    eSignals SignalS = XXX;
    
    if (SignalS == AAA)
    
    Kendini belgeleyen kod.

  2. Bir bit maskesi kullanma:
    600+ derlemesinde != bit düzeyinden daha yüksek önceliğe sahiptir ve , kullanmanız ZORUNLUDUR
    (SignalS & AAA) != 0
    Önceki yapılarda bit düzeyinde ve çarpma işleminden daha yüksekti

    Operasyon

    Açıklama

    Yürütme Emri

    ()

    []

    .

    İşlev Çağrısı

    Bir dizi öğesine başvurma

    Bir yapı elemanına atıfta bulunmak

    Soldan sağa

    !

    ~

    -

    ++

    --

    (tip)

    boyutu

    mantıksal olumsuzlama

    Bit düzeyinde olumsuzlama (tamamlayıcı)

    işaret değiştirme

    Bir artış

    Bir azalma

    tipleme

    Bayt cinsinden boyut belirleme

    Sağdan sola

    *

    /

    %

    Çarpma işlemi

    Bölünme

    Modül bölümü

    Soldan sağa

    +

    -

    Ek

    Çıkarma

    Soldan sağa

    <<

    >>

    Sol shift

    Sağa kaydırma

    Soldan sağa

    <

    <=

    >

    >=

    Daha az

    Az veya eşit

    daha büyük

    Büyük veya eşit

    Soldan sağa

    ==

    !=

    Eşit

    Eşit değildir

    Soldan sağa

    &

    Bit düzeyinde VE işlemi

    Soldan sağa

    ^

    Bit düzeyinde özel VEYA

    Soldan sağa

    |

    Bit düzeyinde VEYA işlemi

    Soldan sağa

    &&

    Mantıksal VE işlemi

    Soldan sağa

    ||

    Mantıksal VEYA işlem

    Soldan sağa

    ?:

    Koşullu Operatör

    Sağdan sola

    =

    *=

    /=

    %=

    +=

    -=

    <<=

    >>=

    &=

    ^=

    |=

    Atama

    atama ile çarpma

    atama ile bölme

    atamalı modül

    atama ile ekleme

    atama ile çıkarma

    atama ile sola kaydırma

    Atama ile sağa kaydırma

    Bitsel VE atamalı

    Özel VEYA atamalı

    Bit düzeyinde VEYA atama ile

    Sağdan sola

    ,

    Virgül

    Soldan sağa

     () Fonksiyon çağrısı Soldan sağa
    [] Bir dizi öğesine başvuru
    
    ! Mantıksal olumsuzlama Sağdan sola
    - İşaret değiştirme işlemi
    ++ Artış
    -- Azaltma
    ~ Bit düzeyinde olumsuzlama (tamamlayıcı)
    
    & Bitsel işlem VE Soldan sağa
    | Bit düzeyinde işlem VEYA
    ^ Bit düzeyinde işlem özel VEYA
    << Sola kaydırma
    >> Sağa kaydırma
    
    * Soldan sağa çarpma
    / Bölünme
    % Modül bölümü
    
    + Soldan sağa ekleme
    - çıkarma
    
    < Daha az Soldan sağa
    <= Küçük veya eşit
    > Daha büyük
    >= Büyüktür veya eşittir
    == Eşit
    != Eşit değil
    
    || Mantıksal VEYA Soldan sağa
     && Mantıksal VE Soldan sağa
     = Atama Sağdan sola
    += Atama ekleme
    -= Atama çıkarma
    *= Atama çarpması
    /= Atama bölümü
    %= Atama modülü
    >>= Atama sağa kaydırma
    <<= Atama sola kaydırma
    &= Atama bit düzeyinde VE
    |= Atama bit düzeyinde VEYA
    ^= Özel atama VEYA
    
    , Virgül Soldan sağa
 

WHRoeder kodunuzu buldum (son piyasa emrini seçin) ve tp fiyatını kontrol etmek ve önceki emirlerde aynı tp fiyatını ayarlamak için vurgulanmış satırlar ekledim:

 int PositionIndex;     //  <-- this variable is the index used for the loop

int TotalNumberOfOrders;   //  <-- this variable will hold the number of orders currently in the Trade pool
double Ord_TP= 0 ;
TotalNumberOfOrders = OrdersTotal ();     // <-- we store the number of Orders in the variable

for (PositionIndex = TotalNumberOfOrders - 1 ; PositionIndex >= 0 ; PositionIndex --)   //  <-- for loop to loop through all Orders . .   COUNT DOWN TO ZERO !
   {
   if ( ! OrderSelect (PositionIndex, SELECT_BY_POS , MODE_TRADES ) ) continue ;   // <-- if the OrderSelect fails advance the loop to the next PositionIndex
   
   if ( OrderMagicNumber () == MagicNo       // <-- does the Order's Magic Number match our EA's magic number ? 
      && OrderSymbol () == Symbol ()         // <-- does the Order's Symbol match the Symbol our EA is working on ? 
      && ( OrderType () == OP_BUY            // <-- is the Order a Buy Order ? 
      ||   OrderType () == OP_SELL ) )       // <-- or is it a Sell Order ?
   if ( OrderTakeProfit ()> 0 ) 
   Ord_TP = OrderTakeProfit (); break ;
   if ( OrderTakeProfit () == Ord_TP) continue ;
     OrderModify ( OrderTicket (), 0 , 0 ,Ord_TP, 0 ,CLR_NONE);
       //if ( ! OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), Slippage ) )               // <-- try to close the order
         //Print("Order Close failed, order number: ", OrderTicket(), " Error: ", GetLastError() );  // <-- if the Order Close failed print some helpful information 
      
   } //  end of For loop

Fazladan bir satır...

 if ( OrderTakeProfit ()> 0 ) 
   Ord_TP = OrderTakeProfit (); break ;
   if ( OrderTakeProfit () == Ord_TP) continue ;
   if ( OrderTakeProfit () != Ord_TP)
     OrderModify ( OrderTicket (), 0 , 0 ,Ord_TP, 0 ,CLR_NONE);

Yanlışım varsa lütfen yönlendirin.

(Bütün piyasa+bekleyen emirler sadece al, sat değil veya sadece sat, al değil ve her yeni piyasa emri açıldığında tüm piyasa emirlerinin tp'sinin değişmesini istiyorum).

BU BENİM İÇİN GERÇEKTEN ZOR AMA YAPMAK İSTİYORUM. :(

 
Parantez kullanmadığınız için girintileriniz yanlış
 if ( OrderTakeProfit ()> 0 ) 
   Ord_TP = OrderTakeProfit (); break ;
   if ( OrderTakeProfit () == Ord_TP) continue ;
   if ( OrderTakeProfit () != Ord_TP)
     OrderModify ( OrderTicket (), 0 , 0 ,Ord_TP, 0 ,CLR_NONE);
Kodunuz gerçekte nedir
 if ( OrderTakeProfit ()> 0 ) 
   Ord_TP = OrderTakeProfit (); 
break ;
/*NOTREACHED
   if(OrderTakeProfit() == Ord_TP) continue;
   if(OrderTakeProfit() != Ord_TP)
    OrderModify(OrderTicket(),0,0,Ord_TP,0,CLR_NONE);
*/
 
İşler benim için karmaşıklaşıyor. Sanırım baştan kod yazmalıyım. ve kodun her bir bölümünü buraya yapıştıracağım. belki bunu daha iyi anlayabilirim.