[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 323

 
sergeev:

prima di tentare la chiusura, eseguire OrderSelect e controllare OrderCloseTime. Se è già maggiore di 0, l'ordine viene chiuso.


Ho Select e dove dovrei mettere OrderCloseTime? Dopo la selezione o nella funzione CloseOrder()?

Guardato in Doc. Non ho History Select, solo Trad. Quindi proverò a mettere questa History Select dopo la condizione di chiusura e prima di CloseOrder(). Grazie!

 
All'interno della selezione, dopo i filtri per simbolo e magik (se presenti), cioè, controlliamo l'ordine per il tempo di chiusura, se non è uguale a zero (l'ordine è chiuso), vietiamo la sua richiusura
 
FAQ:
All'interno della selezione, dopo i filtri per simbolo e magia (se ce ne sono), cioè, controlliamo l'ordine per il tempo di chiusura, se non è uguale a zero (l'ordine è chiuso), allora vietiamo di chiuderlo di nuovo


Grazie! Proverò quello sopra allora!

Ecco, provato a inserire, eseguito nella demo, ma qualcosa esce più errori e diverso. Chiedo prima, dai fornelli, su questo codice di Doka:

  if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
    {
     datetime ctm=OrderOpenTime();
     int      ticket=OrderTicket();
     if(ctm>0) Print("Время открытия ордера № ",ticket," ",ctm);
     ctm=OrderCloseTime();
     if(ctm>0) Print("Время закрытия ордера № ",ticket," ",ctm);
    }
  else
    Print("OrderSelect() вернул ошибку ",GetLastError());

Cosa c'è di superfluo qui, da inserire tra Selecta Trades, controlli dei simboli, magik... и ... tipo di ordine. Forse datetime cmt e int ticket da introdurre all'inizio? E la stampante scrive altri errori.

E aggiungere una condizione di chiusura:

if(ctm == 0) {CloseOrder(OrderTicket(),OrderLots(),Bid,slip,Yellow);return(0);} else continue;

Aiuto per favore!

 

Ciao, potresti darmi un suggerimento?

Voglio aprire un ordine non immediatamente con stp e sl, ma impostare stp e sl dopo che l'ordine è aperto modificandolo

L'ho fatto:

ticket=OrderSend(Symbol(),cmd,lots,NormalizeDouble(open,Digits),5*_pipsMultiplyer,_orderComment,GenerateMagicNumber(magicNumber,Symbol(),Period()),0,SpringGreen)
{
OrderSelect(ticket,SELECT_BY_TICKET);
}
{
OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Blue);
ritorno(0);

}


Non so cosa diavolo sto facendo.

giusto?

 
RMX13:

Ciao, potresti darmi un suggerimento?

Voglio aprire un ordine non immediatamente con stp e sl, ma impostare stp e sl dopo che l'ordine è aperto modificandolo

L'ho fatto:

ticket=OrderSend(Symbol(),cmd,lots,NormalizeDouble(open,Digits),5*_pipsMultiplyer,_orderComment,GenerateMagicNumber(magicNumber,Symbol(),Period()),0,SpringGreen)
{
OrderSelect(ticket,SELECT_BY_TICKET);
}
{
OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,Blue);
ritorno(0);

}


Non so cosa diavolo sto facendo.

giusto?



E non capisco e di più! Usare l'SRC per delineare il codice, vedi sopra?
 
int orderOpen(int cmd, double open, int stopLossPips, int takeProfitPips, int magicNumber){       
      double sl=0, tp=0;
      if(stopLossPips>0){
         stopLossPips = MathMax(stopLossPips,MarketInfo(Symbol(),MODE_STOPLEVEL)+3*_pipsMultiplyer);
      }
      if(takeProfitPips>0){
         takeProfitPips = MathMax(takeProfitPips,MarketInfo(Symbol(),MODE_STOPLEVEL)+3*_pipsMultiplyer);
      }
      int ticket=-1;
      if(_doTrade){        
         double lots  = OrderLotSize();
         if(lots>=MarketInfo(Symbol(), MODE_MINLOT)){          
            //wait context
            if(TradeIsBusy() < 0) {
                 return(-1); 
            }
            if(cmd==OP_BUYSTOP || cmd==OP_BUY || cmd==OP_SELLLIMIT){
               RefreshRates();
               if(cmd==OP_BUY){
                  open=Ask;
               }
               if(stopLossPips>0){
                  sl=NormalizeDouble(open-stopLossPips*Point,Digits);
               }
               if(takeProfitPips>0){
                  tp=NormalizeDouble(open+takeProfitPips*Point,Digits);
               }
               ticket=OrderSend(Symbol(),cmd,lots,NormalizeDouble(open,Digits),5*_pipsMultiplyer,sl,tp,_orderComment,GenerateMagicNumber(magicNumber,Symbol(),Period()),0,SpringGreen);              
            }else{
               RefreshRates();
               if(cmd==OP_SELL){
                  open=Bid;
               }
               if(stopLossPips>0){
                  sl=NormalizeDouble(open+stopLossPips*Point,Digits);
               }
               if(takeProfitPips>0){
                  tp=NormalizeDouble(open-takeProfitPips*Point,Digits);
               }
               ticket=OrderSend(Symbol(),cmd,lots,NormalizeDouble(open,Digits),5*_pipsMultiplyer,sl,tp,_orderComment,GenerateMagicNumber(magicNumber,Symbol(),Period()),0,Red);
            }
Per cominciare, questo pezzo è responsabile dell'apertura di un ordine?
 
Ho capito tutto da solo.
 
borilunad:


Grazie! Proverò quanto sopra allora!

Ecco, provato a inserire, eseguito in demo, ma qualcosa esce più errori e diverso. Chiedo prima, dai fornelli, su questo codice di Doki:

Cosa c'è di superfluo qui da inserire tra Selecta Trades, controlli dei simboli, magik... и ... tipo di ordine. Forse datetime cmt e int ticket da introdurre all'inizio? E la stampante scrive altri errori.

E aggiungere una condizione di chiusura:

Per favore, aiutatemi!


Eh, come dice il detto: "impara lo studente" (c)

for(int i=OrdersTotal()-1;i>=0;i--){
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES){
      if(OrderSymbol()!=Symbol()){continue;}// фильтр по символу(если не наш символ, то пропускаем)
      if(OrderMagicNumber()!=magik){continue;}// фильтр по магику
      if(OrderCloseTime()!=0){continue;}// фильтр по времени закрытия (если не=0 то ордер уже закрыт)
      if(OrderType()<=OP_SELL){//закрытие для рыночных ордеров
         OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),MarketInfo(OrderSymbol(),MODE_SPREAD),CLR_NONE);
      }else{// закрытие для отложенных ордеров
         OrderDelete(OrderTicket());
      }
   }
}

Cancellare (commentare) ciò che non è necessario.

 
               ticket=OrderSend(Symbol(),cmd,lots,NormalizeDouble(open,Digits),5*_pipsMultiplyer,_orderComment,GenerateMagicNumber(magicNumber,Symbol(),Period()),0,Red);
            OrderSelect(ticket,SELECT_BY_TICKET);
            OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0);

Un pezzo di codice che apre un ordine e imposta stop loss e take profit

il terminale genera i seguenti errori: EURUSD,M30: OrderSend error 130

EURUSD,M30: biglietto non valido per la funzione OrderModify

EURUSD,M30: errore OrderModify 4051

EURUSD,M30: OrderSend fallito con errore #4051 bid:1.23674000 ask:1.23683000 Open:1.23674000 SL:1.2423 TP:1.2283 MODE_STOPLEVEL:0.00000000 LOT:0.01000000

Qual è il problema?


 
FAQ:


Eh, come dice il detto: "Studia, studente" (c).

Cancellare il superfluo (commentarlo)


Grazie mille! Anch'io sono uno che impara per tutta la vita! E in generale, imparare è più interessante che lavorare. Proverò a regolarla ora, non voglio cambiare l'ordine nel codice. In qualsiasi momento cambio o aggiungo condizioni a seconda dei cambiamenti nel comportamento del mercato. Tutto il meglio per voi e buona notte!
Motivazione: