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

 

Buon pomeriggio, potreste dirmi se c'è un codice


OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);//выбрать последний ордер
if (OrderType()==OP_BUY||OP_SELL)
 {
 if (OrderMagicNumber()==1)
  {
  if (OrderProfit()<0)

   {

che selezionerà l'ultimo ordine nella storia con un profitto negativo.

Se c'è una situazione in cui 3 ordini vengono chiusi nello stesso momento, come faccio a sapere che gli ultimi 3 ordini sono stati chiusi nello stesso momento?

Ho provato a fare il ciclo for, ma trova tutti gli ordini chiusi in perdita, mentre io ho bisogno solo dell'ultimo ordine o dell'ultimo ordine a seconda di quanti di loro hanno chiuso in una volta

 
BruDer:

Non ho trovato una risposta nella ricerca

come posso vedere dallo script quali indicatori sono sul grafico, quali parametri e indicatori, in quali sottofinestre si trovano?

grazie


Assolutamente no.
 

vik-777:

come faccio a sapere che gli ultimi 3 hanno chiuso allo stesso tempo?

OrderCloseTime()
 
vik-777:

Buon pomeriggio, potreste dirmi se c'è un codice


che selezionerà l'ultimo ordine nella storia con un profitto negativo.

Se c'è una situazione in cui 3 ordini vengono chiusi nello stesso momento, come faccio a sapere che gli ultimi 3 ordini sono stati chiusi nello stesso momento?

Ho provato a fare il ciclo for, ma trova tutti gli ordini chiusi in perdita, mentre io ho bisogno solo dell'ultimo ordine o dell'ultimo ordine a seconda di quanti di loro hanno chiuso in una volta




Se è lo stesso, allora lo confronti con il tempo di chiusura del tuo precedente ordine chiuso... come questo, naturalmente, è tutto in un ciclo - dall'ultimo chiuso al primo, si va in sequenza e si confronta il tempo di chiusura degli ordini... Un'altra cosa - stampare l'orario di chiusura degli ultimi ordini che conosci in anticipo, diciamo tre ordini , può essere diverso, anche se lo intendi come " simultaneo", cioè come lo intendo io, l'ordine si chiude in qualsiasi momento, cioè In realtà, il tempo di chiusura di, diciamo, tre ordini contemporaneamente non può essere lo stesso - provate a stampare () e vedere i valori dei vostri tre ordini TIME - i loro valori di OrderCloseTime() caratteristiche, cioè, potremmo dover introdurre il concetto di TEMPO di chiusura, cioè, deviazione del tempo di chiusura di diversi ordini di qualche piccolo valore quando possiamo considerare che hanno chiuso contemporaneamente. Sperimentate e vedete voi stessi da qui.
 

Prendere aiuto dalla sala.

Come scrivere una condizione in OrderSelect():

if(order opening day != today's day)ticket=OrderTicket();

 
if(TimeDay(OrderOpenTime())!=TimeDay(CurrentTime()))ticket=OrderTicket();
 
ikatsko:

COME FARESTE A CONTARE IL NUMERO DI POSIZIONI LUNGHE REDDITIZIE E SEPARATAMENTE IL NUMERO DI POSIZIONI CORTE REDDITIZIE?

La strategia è la seguente: se il numero di posizioni lunghe redditizie dall'inizio dell'Expert Advisor (o meglio - per l'intera storia del conto) è maggiore del numero di posizioni corte, allora si dovrebbe permettere di aprire solo posizioni lunghe. E viceversa.

È chiaro come contare queste operazioni, se sono chiuse dall'Expert Advisor: Close - Count. Ma se una posizione viene chiusa da TP o SL, allora ... ?

Forse qualcuno ha un codice pronto della funzione?

Bene, confronta in un ciclo su posizioni chiuse il loro prezzo di chiusura e i loro prezzi di take e stop:

OrderTakeProfit(); OrderStopLoss(); OrderClosePrice();

Ed è ancora più facile selezionare OP_BUY e OP_SELL e scrivere in quattro variabili separate il numero di posizioni di acquisto e vendita perdenti e redditizie

se (OrderProfit()+OrderSwap()+OrderCommission()>0) { /* la posizione è redditizia */ }
else { /* la posizione è in perdita */ }

 
Grazie!
 

Ho guardato tutto..., ho fatto tutto... Non aprirà una posizione, ecco tutto! Si chiude correttamente, ma non si apre... Non so cosa fare! Forse qualcuno troverà un bug nel programma?

 
//+------------------------------------------------------------------+
//|                                                     DOKTRADE.mq4 |
//|                                                DOKSTER@YANDEX.RU |
//|                                                DOKSTER@YANDEX.RU |
//+------------------------------------------------------------------+
#property copyright "DOKSTER@YANDEX.RU"
#property link      "DOKSTER@YANDEX.RU"

   extern double LOT = 0.01;   // LOTS
   extern double KOF = 2;
   extern double SAF = 5;
   extern int    FRC = 144;
   extern double STL = 100;
   extern double TPF = 100;
   
   int start()
     
    { 


int CNT;

int DIG;

int TOTAL;
int SPREAD;

double SPR;
double SPRW;

double FRCU;
double FRCD;

double EMAH;
double EMAM;
double EMAL;

double OPEN;
double CLOSE;

double DFB;
double DFS;

double STLW = STL*Point;
double TPFW = TPF*Point;

double SAFW = SAF*Point;

EMAH = iMA(NULL,0,34,8,MODE_SMA,PRICE_HIGH,1);
EMAM = iMA(NULL,0,34,8,MODE_SMA,PRICE_MEDIAN,1);
EMAL = iMA(NULL,0,34,8,MODE_SMA,PRICE_LOW,1);

OPEN = iOpen(NULL,0,1);
CLOSE = iClose(NULL,0,1);

FRCU = High[iHighest(NULL,0,MODE_HIGH,FRC,1)];
FRCD = Low[iLowest(NULL,0,MODE_LOW,FRC,1)];

DFB = (CLOSE-FRCD);
DFS = (FRCU-CLOSE);

SPR = MarketInfo(Symbol(),MODE_SPREAD);
SPRW = (SPR*Point);

DIG = MarketInfo(Symbol(),MODE_DIGITS);

TOTAL = OrdersTotal();


if(TOTAL<1)

 { if (OPEN<EMAH&&CLOSE>EMAH)
   
   OrderSend(Symbol(),OP_BUY,LOT,Ask,3,0,0,"DOKTRADE",15775,0,Green);
  
 
   if (OPEN>EMAL&&CLOSE<EMAL)
 
   OrderSend(Symbol(),OP_SELL,LOT,Bid,3,0,0,"DOKTRADE",15885,0,Red);
  
  return(0);
 
    }
    
           
      
  for(CNT=0;CNT<TOTAL;CNT++)    
  
  {
      
  OrderSelect(CNT,SELECT_BY_POS,MODE_TRADES);
  
  {
  
  if (OrderType()==OP_BUY && OrderSymbol()==Symbol())   
                                             
      {
      
       if (OPEN>EMAL&&CLOSE<EMAL)    
     
        OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
        
         if (OPEN>EMAM&&CLOSE>EMAM)
          
           OrderModify(OrderTicket(),OrderOpenPrice(),FRCD-SAFW,CLOSE+DFB,Green);
        
        return(0);
        
        }
        
  if (OrderType()==OP_SELL && OrderSymbol()==Symbol())
        
      {
       
         if (OPEN<EMAH&&CLOSE>EMAH)
         
         OrderClose(OrderTicket(),OrderLots(),Ask,3,Blue);
         
          if (OPEN<EMAM&&CLOSE<EMAM)
           
           OrderModify(OrderTicket(),OrderOpenPrice(),FRCU+(SAFW+SPRW),CLOSE-DFS,Red);
       
         return(0);
         
         }
          }
           }
            }