[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 744

 

Apre ancora questo ordine in un lotto.

Ecco come ho impostato le variabili nel mio ekspert

extern int TakeProfit=18;
extern int StopLoss=18;
extern double Lot=0.01;
extern int StartTime=0;
int Today=0;
int h=10;
int h1=26;
int mag=777;
bool b=0,s=0, //соответственно бай или селл  
bs=0,// если закрытие по стоплоссу ордера бай
ss=0,// если закрытие по стоплоссу ордера sell
bt=0,
st=0;//      то же по ТП
double bl=0,sl=0; // лоты соответсвенно для бай и селл

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{


if(DayOfWeek()==0 || DayOfWeek()==6) return(0); // в выходные не работаем
if(!IsTradeAllowed()) return(0); // пропустим тик если терминал занят
int total = OrdersTotal();
if(total == 0)



   {NewOrder(OP_BUY,Lot);
    NewOrder(OP_SELL,Lot);
    NewOrder(OP_BUYLIMIT,Lot);
    NewOrder(OP_SELLLIMIT,Lot);
    NewOrder(OP_BUYSTOP,Lot);
    NewOrder(OP_SELLSTOP,Lot);
    Today=TimeDay(TimeCurrent());}
    
{



for(int cnt=OrdersHistoryTotal();cnt>0;cnt--)
     {
OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY);
{if(OrderMagicNumber()== mag &&
OrderSymbol()==Symbol()) 
{ if (OrderType() == OP_BUY )  {b=1; if (OrderClosePrice()==OrderTakeProfit()) bt=1;
if (OrderClosePrice()==OrderStopLoss()) bs=1; bl=OrderLots()*100; break;}
if (OrderType() == OP_SELL)  {s=1; if (OrderClosePrice()==OrderTakeProfit()) st=1; 
if (OrderClosePrice()==OrderStopLoss()) ss=1; sl=OrderLots()*100; break;}
            }
         }
      }


}//end

if(bs==1||bl==1)
{   
    NewOrder1(OP_BUYLIMIT,Lot);
Today=TimeDay(TimeCurrent());}
    

ed ecco l'apertura dell'ordine

int NewOrder1(int Cmd,double Lot)
{double TP=0; //тейкпрофит
double SL=0; //стоплосс
double PR=0; //Цена
double LT=0; //Лот
while(!IsTradeAllowed()) Sleep(100);
if(Cmd==OP_BUYLIMIT)
   {PR=Ask-Point*h;
    if(TakeProfit>0) TP=PR+TakeProfit*Point;
    if(StopLoss>0) SL=PR-StopLoss*Point;
    if(Lot>0) LT=3*Lot;}
int tic1=OrderSend(Symbol(),Cmd,LT,PR,3,SL,TP,0,mag,0,CLR_NONE);
//-----------
if(tic1<0) Print(GetLastError());

if(tic1>0){
b=0;s=0; //соответственно бай или селл  
bs=0;// если закрытие по стоплоссу ордера бай
ss=0;// если закрытие по стоплоссу ордера sell
bt=0;
st=0;//      то же по ТП
bl=0;sl=0; // лоты соответсвенно для бай и селл
}
//-----------
return(tic1);}
 
profitinvesting:

Potresti per favore darmi il codice della funzione che metterà uno stop una volta al livello di pareggio, quando il profitto sarà per esempio di 20 pips

Grazie in anticipo per la risposta:)

Potete trovarlo e molte altre funzioni utili sul sito di Igor Kim http://www.kimiv.ru. E quella di cui avete bisogno si chiama MovingInWL(), se non mi sbaglio.
 
ToLik_SRGV:

Boris, è ancora più semplice di così. Tu lasci cadere questa linea:

All'inizio del codice (per essere separati, non in nessuna funzione).
E poi in quei posti dove c'è una chiamata della funzione OrderSend(...), basta racchiuderla in un ulteriore abbraccio dell'operatore if

Ora, prima di aprire il prossimo ordine, l'operatore controllerà se ci sono o non ci sono offerte al bar corrente. Se lo sono stati, allora la barra attuale è stata memorizzata nella variabile new e se la barra attuale coincide con quella memorizzata, allora non verrà aperta nessuna posizione. Di conseguenza, se la barra è nuova, allora il suo tempo di apertura non coinciderà con i dati della variabile new, l'affare sarà aperto e la variabile new avrà un nuovo valore.

Non conosco esattamente l'architettura del tuo EA, ma questo metodo dovrebbe funzionare nella maggior parte dei casi.


Grazie mille! Si adatta perfettamente!
 

Non riesco a pensare a un modo migliore di procedere.

C'è un indicatore con un mucchio di array. Il secondo indicatore deve lavorare con questi array. Per calcolare ed emettere il risultato nella propria tabella.

Il modo più semplice sarebbe chiamare questo indicatore, ma sembra che questo non sia possibile.

Come raggiungere altri array?

 
Abzasc:

Non lo so.

Ho capito.
 
LAIT123:

Ciao, potresti dirmi come visualizzare i log in MT4?

Non è necessario pubblicare 15 messaggi con un solo contenuto. E se lo fai, è auspicabile che pulisci da solo. Non aspettate gli zii.
 
artmedia70:

Devi avere davvero bisogno di... :) O il mouse è bloccato...



Non è il mouse che è bloccato. È l'impazienza. Mi ci sono voluti 20 minuti per cancellare 15 post alla fine.
 
Vinin:

Non è il mouse che è bloccato.
Pensava fosse una chat room :)
 
FoxUA:

apre ancora questo ordine in un lotto.

Ecco come ho impostato le variabili nel mio ekspert

ed ecco l'apertura dell'ordine

Non capisco affatto come ci si sente... Le parentesi graffe non combaciano tra loro, manca una parentesi di chiusura... Non so cosa stia succedendo. Pulisci il tuo codice... È difficile da gestire, e non c'è modo di compilarlo ed eseguirlo - stiamo lavorando sui nostri codici...
 
Vinin:

Non è il mouse che è bloccato. È l'impazienza. Mi ci sono voluti 20 minuti per cancellare 15 post alla fine.
:) L'impazienza è di solito praticata in un altro ufficio... :)