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

 
chief2000:

Ecco una domanda.
Posso sapere dal codice di un indicatore personalizzato se la finestra in cui è in esecuzione è attualmente attiva o no?
Per esempio, lo stesso indicatore è in esecuzione in due finestre - vuoi che funzioni solo nella finestra che il grafico è attivo e inattivo nella seconda finestra.

Grazie!

Ancora una volta la biblioteca aiuta :-)
 
Zhunko:
Ancora una volta la biblioteca aiuta :-)
Grazie!
 
Buonasera, ho iniziato un rapido rollover del robot qui, e anche improvvisamente senza errori procampato, ed ecco che improvvisamente apre due ordini in una volta!!! Cioè un ordine alla volta, al primo e al secondo tick. Ecco il codice, lo incollo qui sotto. La variabile BUY è il numero di ordini di acquisto che sono già stati aperti e se è superiore a zero, anche un solo ordine esiste, allora non deve essere aperto.
//+------------------------------------------------------------------+
//|                                                        антиб.mq4 |
//|                      Copyright © 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern double volume=0.01;extern double stoploss=12,takeprofit=12;extern int magic=50001,I=5;
int ticket;double volumee ; 
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   volumee=volume;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
        
int start()
  {   int BUY;
  
//----

 for( int i=OrdersHistoryTotal() -1;i>=0;i--){
    OrderSelect(i,SELECT_BY_POS,MODE_HISTORY); if (OrderMagicNumber( )== magic) { if(OrderSymbol()== Symbol()) {
      if(OrderType()==OP_BUY ) {   if ((OrderProfit( )-3*Point) <  OrderTakeProfit( ) && (OrderProfit( )+3*Point) >  OrderTakeProfit( ) ) { if( OrderTicket( ) == ticket ) {
               volumee = volumee+volumee;}}}}}}
if (volumee>volume*I){volumee=volume;}


              for ( i=OrdersTotal()-1;i>=0;i--)
   {
    if (OrderSelect(i, SELECT_BY_TICKET ) == true)    Alert ("Select error ", GetLastError( ) ) ;
     if(OrderMagicNumber( )== magic){
      if(OrderSymbol()== Symbol()) {
      if(OrderType()==OP_BUY ) {
                             BUY++;}}}}   
 if(BUY==0){

 ticket= OrderSend( Symbol(), OP_BUY, volumee, NormalizeDouble(( Ask),Digits),NormalizeDouble(( Point*3),Digits) , NormalizeDouble(( Ask-stoploss*Point),Digits), NormalizeDouble(( Ask+takeprofit*Point),Digits), NULL,  magic, 0, Red) ;}
 
 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
Ecco, due mandati! !
 

Sapete, forse ho giocherellato con il ciclo for, un ordine, meno un altro, e la condizione del ciclo non è affatto soddisfatta. Sì, sì, sembra, e ci sono esattamente due ordini in apertura!

Gente, devo cancellare i miei ultimi commenti?

No, ne ho ancora due, e dopo la terza o quarta spunta Alert: Select error 4105 scrive,

Sembra che l'ordine non sia stato selezionato e non c'è nessun errore all'inizio... Questo è corretto for( int i=0;i<=OrdersHistoryTotal();i++){

e così per( int i=0;i<=OrdersTotal();i++){

E ci sono due ordini tutti uguali.

Ecco, uno. Uff. ;


 
Errore 4105 - ordine non selezionato - non va via, ma generalmente funziona adeguatamente
 
Ivn:

Buon pomeriggio come scrivere un consulente standard per un altro periodo di tempo. Cioè mettere questo indicatore sul grafico a 1 ora che mostrerà l'indicatore a 4 ore.

пытался //+------------------------------------------------------------------+
//| vv a ore 4.mq4 |
//| Copyright © 2012, MetaQuotes Software Corp.
//| https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, MetaQuotes Software Corp."
#proprietà link "https://www.metaquotes.net/"

#proprietà indicator_chart_window
#proprietà indicator_buffers 3
#property indicator_color1 LightSeaGreen
#property indicator_color2 LightSeaGreen
#property indicator_color3 LightSeaGreen
//---- parametri dell'indicatore
extern int BandsPeriod=20;
extern inttern BandsShift=0;
extern double BandsDeviations=2.0;
//---- buffer
doppio MovingBuffer[];
doppio UpperBuffer[];
doppio LowerBuffer[];
//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'indicatore personalizzato
//+------------------------------------------------------------------+
int init()
{
//---- indicatori
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,MovingBuffer);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,UpperBuffer);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2,LowerBuffer);
//----
SetIndexDrawBegin(0,BandsPeriod+BandsShift);
SetIndexDrawBegin(1,BandsPeriod+BandsShift);
SetIndexDrawBegin(2,BandsPeriod+BandsShift);
//----
ritorno(0);
}
//+------------------------------------------------------------------+
//| Bande di Bollinger
//+------------------------------------------------------------------+
int start()
{
int i,k,counted_bars=IndicatorCounted();
doppia deviazione;
doppia somma, oldval, newres;
int B=iBars( NULL,PERIOD_H4);
double C=iClose(NULL,PERIOD_H4,0);
//----
if(B <=BandsPeriod) return(0);
//---- zero iniziale
se(barre contate<1)
for(i=1;i<=BandePeriodo;i++)
{
MovingBuffer[B-i]=EMPTY_VALUE;
UpperBuffer[B-i]=EMPTY_VALUE;
LowerBuffer[B-i]=EMPTY_VALUE;
}
//----
int limit=B-counted_bars;
if(counted_bars>0) limit++;
for(i=0; i<limite; i++)
MovingBuffer[i]=iMA(NULL,PERIOD_H4,BandsPeriod,BandsShift,MODE_SMA,PRICE_CLOSE,i);
//----
i=BandePeriodo+1;
if(counted_bars>BandsPeriod-1) i=B-counted_bars-1;
mentre(i>=0)
{
sum=0.0;
k=i+BandePeriodo-1;
oldval=MovingBuffer[i];
mentre(k>=i)
{
newres=C[k]-oldval;
sum+=newres*newres;
k--;
}
deviazione=BandsDeviations*MathSqrt(sum/BandsPeriod);
UpperBuffer[i]=oldval+deviazione;
LowerBuffer[i]=oldval-deviation;
i--;
}
//----
ritorno(0);
}
//+------------------------------------------------------------------+

non ha funzionato

questo newres=C[k]-oldval;- '[' - token inaspettato

L'indicatore Bande di Bollinger.


Invece di C[k] inserire iClose(NULL,PERIOD_H4,k);

Tuttavia, ho ottenuto un modo per visualizzare il grafico a ore 1 e la linea a ore 4 in modo più naturale.
Quando traduco questo codice in un grafico, vedo il prezzo lasciare il canale; sembra che il grafico delle Bande di Bollinger a ore 4 non sia collegato alla linea del tempo

grazie in anticipo

 

Ragazzi, potete dirmi per esperienza... Scelto una società per affittare VPS per il trading tramite terminale client MT4, interessato a quanto traffico in media consuma un terminale in esecuzione, per esempio, con dieci sops? Ci saranno diversi terminali in funzione... In modo da poter scegliere il piano dati appropriato tra quelli offerti:

P.S. Hanno una tariffa basata sul traffico totale, cioè in entrata + in uscita.

 

Colleghi, chi conosce la risposta:

Ho un tester di strategia sullo stesso time frame (01.05.2011 - 27.01.2012), coppia di valute EURUSD, su barre orarie (H1), da un DC (Alpari), e lo stesso consulente, ma su computer diversi (laptop, desktop) dà risultati opposti! Sul PC - 2000 dollari, sul portatile +3000. E lì, e lì controllato 2-3 volte.

Si prega di consigliare la causa e cosa fare e / o darmi un link dove che sul tema può essere letto.
 
Sersad:

Colleghi, chi conosce la risposta:

Ho un tester di strategia sullo stesso intervallo di tempo (01.05.2011 - 27.01.2012), la coppia di valute EURUSD, sulle barre orarie (H1), da un DC (Alpari), e lo stesso Expert Advisor, ma su diversi computer (laptop, desktop) dà risultati opposti! Sul PC - 2000 dollari, sul portatile +3000. E lì, e lì controllato 2-3 volte.

Si prega di consigliare la causa e cosa fare e / o darmi un link dove che sul tema può essere letto.


Anch'io sono stato coinvolto in questo una volta... aveva un simile: Il 1° terminale è stato installato con Metacquotes, il 2° con Alparey, la storia anche di conseguenza, c'erano discrepanze significative quando si testava lo stesso gufo, non si riusciva a capire cosa fosse sbagliato per molto tempo.

1. Scarica i terminali da Alpari. Scarica la cronologia delle quotazioni Alpari per lo strumento e apparirà questa finestra:

Se non appare dopo aver premuto F2 seguito da "Download", significa che stai scaricando la cronologia di Alpari Quotes. Se non vedi apparire questa finestra dopo aver premuto F2 seguito da "Download", non stai scaricando la cronologia dei prezzi da Alpari.

2. Nello Strategy Tester imposta tutte le opzioni uguali + controlla lo spread cliccando sul pulsante "Proprietà". Controlla i valori di spread nel tester della strategia cliccando sul pulsante "Symbol properties".

Prima di farlo - cancella e ricarica la cronologia delle quotazioni per lo strumento che ti interessa + controlla il periodo di test: nello screenshot H4 - in modo che sia lo stesso in entrambi i casi.