[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 548

 
harvest:
Signori, potreste darmi un esempio della funzione che sposta una posizione aperta a pareggio (lavoro su tick), il mio Expert Advisor ha un trawl, l'inizio di questo trawl è solo dopo la funzione di rollover to buy. Grazie in anticipo.


Vedi il trailer - la libreria di reti a strascico di Yury Dzyuban - in particolare, come risolve la questione se la rete a strascico viene eseguita solo dal profitto, cioè, se il valore della variabile trlinloss = false, se si strascica nella zona di perdita. Modifica la tua funzione di trawl secondo questo esempio e questo è tutto.

File:
 

Amici, potete dirmi perché il classico Martin non funziona? Apre solo offerte per comprare!!! È da un mese che ci sto giocando - zero emozioni! Funziona bene nello Strategy Tester, ma non nella demo. Un'altra cosa interessante - quando imposto T/S e T/P 1000 - si apre solo su Buy, e quando imposto 200 - su Buy e Sell... Amico, qual è la differenza?

ecco il codice: help plz

//+------------------------------------------------------------------+ 
//| StMartin.mq4 | 
//| Sergey Kodolov | 
//| 84232676421@mail.ru | 
//+------------------------------------------------------------------+ 
#property copyright "Sergey Kodolov" 
#property link "84232676421@mail.ru" 

    extern int TP = 1000; 
    extern int TS = 1000; 
    extern double lots = 0.1; 

    double volumz; 
    int total,ticket; 
    int slip = 3; 
    int Magic = 7; 

 


//+------------------------------------------------------------------+ 
//| expert initialization function | 
//+------------------------------------------------------------------+ 
int init() 
  { 
//---- 

   ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"First order",Magic,0,Yellow); //открываем первый ордер 
 
//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 
//| expert deinitialization function | 
//+------------------------------------------------------------------+ 
int deinit() 
  { 
//---- 

//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 
//| expert start function | 
//+------------------------------------------------------------------+ 
int start() 
  { 
//---- 



OrderOpenFunction(); 

//---- 
   return(0); 
  } 
//+------------------------------------------------------------------+ 

void OrderOpenFunction()
{
   total = OrdersTotal();
   if(total < 1) 
   { 
      OrderSelect(0,SELECT_BY_POS,MODE_HISTORY); 
      volumz = OrderLots(); 
      if(OrderProfit()<0) 
      { 
         if(OrderType() == OP_BUY) 
         { 
            double lot1 = volumz*2; 
            ticket = OrderSend(Symbol(),OP_SELL,lot1,Bid,slip,Ask+TS*Point,Ask-TP*Point,0,Magic,0,Red); 
         } 
         if(OrderType() == OP_SELL) 
         { 
            double lot2 = volumz*2; 
            ticket = OrderSend(Symbol(),OP_BUY,lot2,Ask,slip,Bid-TS*Point,Bid+TP*Point,0,Magic,0,Green); 
         } 
      } 
      if(OrderProfit()>0) 
      { 
         if(OrderType() == OP_BUY) 
         { 
            ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,0,Magic,0,Green); 
         } 
         if(OrderType() == OP_SELL) 
         { 
            ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,0,Magic,0,Red); 
         } 
      } 
   } 
}      
  
 
Alp:

Allora diventa ancora più poco chiaro. Supponiamo che io compri un euro per 1 000 000 (1k) dollari (il broker moltiplica questo per 100 come risultato l'affare va per 100k) il grafico salta 100 punti in su e io li vendo e sono sul lato positivo per 10 000 dollari bene ci commissione del broker e spread come risultato 6000 $ netto in tasca. (Beh, è chiaro che dopo la vendita, scenderà di nuovo di 100 punti.) Questo è senza senso!!!! Forse alla fine cadrà sul fondo? Altrimenti i giocatori molto grandi farebbero miliardi senza fare nulla.


Allora non so...

In generale, la cosa è probabilmente che per un movimento di prezzo notevole è necessario comprare o vendere per una quantità molto grande, MOLTO grande. Per tali somme la leva non è 1/200, come ho fatto io, ma 1/2 in senso figurato. Beh, questo è puramente personale. Posso scrivere tali sciocchezze...

 
C'è una cosa che mi sorprende. Ho postato il codice qui prima, c'era un errore, mi ha aiutato a sistemarlo, Sepulca mi ha aiutato, grazie a lei, fino ad ora il codice funziona tutto... Ma ancora non capisco l'enigma: nel primo ciclo il selettore di ordini ha selezionato un ordine, non c'è stato alcun errore, e poi, quando ho selezionato lo stesso ordine in un'altra linea, sotto, il selettore di ordini ha mostrato errore? Se puoi, dagli un'occhiata, sono solo curioso.
for(  i=0;i<=OrdersHistoryTotal();i++){
    OrderSelect(i ,SELECT_BY_POS,MODE_HISTORY);
     if (OrderMagicNumber( )== magic) { if(OrderSymbol()== Symbol()) {





 current = OrderOpenTime();  Alert ( " current = OrderOpenTime(); ",  current);Alert ( " max ", max );
      
      if (current > max) 
      {                    
         max = current;      
         ticket = OrderTicket();   Alert ( " ticket = OrderTicket();  ", ticket );
      }}}}


       if (ticket>-1){
      OrderSelect( ticket,SELECT_BY_TICKET,MODE_HISTORY);Alert ("SELL Select error HISTORYticket ", GetLastError( )  ) ;
Dimka-novitsek:

Impossibile! Perché no? Non c'erano ordini aperti al momento del superamento! Forse non capisco.

Il ciclo di ricerca è anche sulla storia! È qui che lo assegno alla variabile int ticket!

E giura, mi scusi, 2012.02.04 11:28:47 2011.12.06 16:35 GMT EURUSD,M30: Alert: SELL Select error HISTORYticket 4105

Quando passa da MODE_HISTORY a MODE_TRADES?

E soprattutto, seleziono lo stesso ordine nella storia con l'aiuto di order select, ed è selezionato per primo, altrimenti non potrei lavorarci! Non c'è logica!!!!!! sono scioccato.


 
Potete dirmi dove posso trovare un tale EA o script... C'è un gruppo di ordini (9-11) piazzati su entrambi i lati del prezzo ad una distanza di 5-7 pip da esso. il tempo per attivarli è strettamente limitato. quindi, molto spesso gli ordini non vengono catturati e vengono rimossi. gli ordini vengono piazzati al mattino presto, di regola, il mercato è pesantemente piatto. voglio che il secondo gruppo di ordini si muova dopo il prezzo mentre si avvicina ad uno dei gruppi di ordini. in parole povere, una traccia di ordine pendente con tp e sld. è possibile? grazie mille in anticipo.
 

Ho bisogno di aiuto!

Ho il seguente blocco nel mio EA (contatore di eventi):

if (isCloseLastPosByStop()==True) //se l'ultimo ordine è stato chiuso da Stop

{
N=N+1;
Alert(N, " alce");
} else N=0;

DOMANDA: come faccio a scrivere i dati in un file (Excel) invece di visualizzarli sullo schermo?

 

Buon pomeriggio.

Si prega di avvisare perché le frecce non sono disegnate, codice:

ObjectCreate("miniDown", OBJ_ARROW, 0, Time[1], Open[1]);
ObjectSet("miniDown", OBJPROP_ARROWCODE, 241);
ObjectSet("miniDown", OBJPROP_COLOR, Yellow);

 

Supponiamo che EURUSD=1,44757, GBPUSD=1,63366, vuoi che siano vicini tra loro.

Lasciatemi spiegare:

a=GBPUSD/EURUSD=1,12855336874901 circa 1,12855 ,

cioè se voglio comprare/vendere una valuta in modo che l'affare sia approssimativamente uguale in valore, allora

Ho bisogno di comprare/vendere EURUSD*a, ma non c'è un tale lotto, quindi la mia domanda è come implementarlo, calcolo del lotto?

Non ne ho così tanti, quindi la mia domanda è: come fare?

 
T-G:
Voglio condividere la funzione per calcolare il lotto massimo ammissibile, tenendo conto delle posizioni aperte, in altre parole, utilizzando l'equity. La funzione standard calcola il rischio, ma se ho dei trade, non ho abbastanza soldi per aprirli

Lo scrivevo per un EA personalizzato:

//+----------------------------------------------------------------------------+
double CorrectLots(double lt, int Part=2) {
   double ltcorr, Money, MoneyCorr;
   double dig      = MarketInfo(Symbol(),MODE_DIGITS);
   double MaxLot   = MarketInfo(Symbol(),MODE_MAXLOT);
   double MinLot   = MarketInfo(Symbol(),MODE_MINLOT);
   double StpLot   = MarketInfo(Symbol(),MODE_LOTSTEP);
   double OneLot   = MarketInfo(Symbol(),MODE_MARGINREQUIRED);
   double TradeMrg = NormalizeDouble(AccountFreeMargin()/Part,dig);    // Свободные средства, разрешенные к торговле
   
   lt=MathAbs(lt);
   ltcorr=lt;                                      // Зададим начальное значением ltcorr равным значению lt
   if (lt>=MaxLot) ltcorr=MaxLot;                  // Проверим превышение допустимых ...
   if (lt<=MinLot) ltcorr=MinLot;                  // ... значений лота
   Money=lt*OneLot;                                // Вычисляем стоимость открываемой позы
   if (Money<TradeMrg) return(ltcorr);             // Если свободных средств больше, чем цена позиции -  возвращаем неизменённый лот
   else if (Money>=TradeMrg) {                     // Если цена позиции равна или больше, чем есть свободных средств, то ...
      ltcorr=MathAbs(MathFloor(TradeMrg/OneLot/StpLot)*StpLot);         // ... рассчитаем допустимый лот
      MoneyCorr=ltcorr*OneLot;                      
      Print("Func CorrectLots: лот ",lt," скорректирован до ",DoubleToStr(ltcorr,2),
            " Стоимость до корректировки = ",DoubleToStr(Money,dig),
            " Стоимость после корректировки = ",DoubleToStr(MoneyCorr,dig)
            ); 
      return(ltcorr);                                                   // ... и вернём его значение
      }
   Print("Func CorrectLots: лот вернули без изменений");
   return(ltcorr);                                 // Возврат изначального лота в непредусмотренных случаях с сообщением
}
//+----------------------------------------------------------------------------+

Per correggere il lotto, è necessario chiamare la funzione inserendo come parametro lt il lotto che si desidera aprire una posizione, e al posto del parametro Part - il numero per il quale i fondi liberi utilizzati nel commercio saranno divisi. Cioè per scambiare solo la metà dei fondi liberi, Parte dovrebbe avere un valore di 2, se un terzo, allora 3, un quarto - 4, ecc.

double Lot=CorrectLots(0.1, 2);

Dopo aver chiamato la funzione, inserire Lot come parametro della funzione OrderSend();

La funzione limita i lotti in un EA con un Martin duro e previene i lotti perdenti. Ma anche la redditività era in calo...

 
rispondi al mio precedente, non capisco cosa c'è di sbagliato lì =(
Motivazione: