FORTI Si prega di aiutare - pagina 30

 
demonsn:
Grazie. Aggiunta la vostra opzione come controllo parallelo. Ora si tratta solo di cogliere il momento giusto.

Sono sicuro al 100% che funzionerà!

Perché non hai riempito correttamente la struttura (non solo i campi, ma anche i valori).

Strano che il compilatore non abbia "giurato".

Tu:

MqlTradeRequest.action = TRADE_ACTION_DEAL;

Ne ha bisogno:

MtRequest.action = TRADE_ACTION_DEAL;
 

Ma no! Il codice nel mio messaggio non proviene dall'Expert Advisor, è un frammento corretto di log dove vengono scritte informazioni di debug dall'Expert Advisor. Colpa mia, errore mio).

L'EA stesso riempie la struttura come richiesto, ma il risultato del controllo è diverso. O calcola il margine correttamente o dà delle sciocchezze come nell'esempio.

Ecco un frammento dal sito live

   MqlTradeRequest MtRequest = {0}; 

   switch(OrderType)
   {
      case ORDER_TYPE_BUY:         
         MtRequest.price     = CurrentTick.ask;         
         break;

      case ORDER_TYPE_SELL:         
         MtRequest.price     = CurrentTick.bid;
         break;

      default:
         LogFile.Log(LOG_PRINT,__FUNCTION__," error: Invalid OrderType");
         return(false);
   }

   MtRequest.tp        = 0.0;
   MtRequest.sl        = 0.0;
   MtRequest.action    = TRADE_ACTION_DEAL;
   MtRequest.magic     = 0;
   MtRequest.symbol    = strSymbol;
   MtRequest.volume    = dblLots;
   MtRequest.deviation = Config.Deviation;
   MtRequest.type      = OrderType;
   MtRequest.type_filling = Config.OrdersFillingType;
 

Fate in modo che sia così:

   MqlTradeRequest MtRequest = {0}; 
   MqlTradeRequest MtResult = {0}; 

   switch(OrderType)
   {
      case ORDER_TYPE_BUY:         
         MtRequest.price     = CurrentTick.ask;         
         break;

      case ORDER_TYPE_SELL:         
         MtRequest.price     = CurrentTick.bid;
         break;

      default:
         LogFile.Log(LOG_PRINT,__FUNCTION__," error: Invalid OrderType");
         return(false);
   }

   MtRequest.action    = TRADE_ACTION_DEAL;
   MtRequest.magic     = 77777777777777;
   MtRequest.symbol    = strSymbol;
   MtRequest.volume    = dblLots;
   MtRequest.type      = OrderType;
   MtRequest.type_filling = Config.OrdersFillingType;
   MtRequest.type_time = ORDER_TIME_DAY;
 

Ecco un altro momento nel registro:

 MqlTradeRequest structure:
   action: Action Deal
   magic: 0
   order: 0
   symbol: Si-12.15
   volume: 2.00
   price: 63365
   stoplimit: 0
   sl: 0
   tp: 0
   deviation: 50
   type: ORDER_TYPE_SELL
   type_filling: ORDER_FILLING_FOK
   type_time: gtc
   expiration: 1970.01.01 00:00
   comment: (null)

 MqlTradeCheckResult structure:
   retcode: 10019 (There is not enough money to complete the request)
   balance: 133921.71
   equity: 132772.57
   profit: 0.00
   margin: 172148.68
   margin_free: -39376.11
   margin_level: 77.13
   comment: No money

Passo la stessa struttura a OrderSend() e tutto si apre perfettamente!

A proposito, costruire 1194.

Vendo Si-12.15, 2 lotti. GO per 1 contratto è di 5090 rubli. Uno scambio dovrebbe avere il QR 5090*2 = 10180 RUB. Ma la funzione restituisce 172148,68 RUB, che equivale a 172148,68 / 5090 = 33,82 contratti!

Che miracolo...

 
demonsn:

Ecco un altro momento nel registro:

Passo la stessa struttura a OrderSend() e tutto si apre bene!

A proposito, costruire 1194.

Vendo Si-12.15, 2 lotti. GO per 1 contratto è di 5090 rubli. Un affare dovrebbe avere SE di 5090*2 = 10180 rubli. E la funzione restituisce 172148,68 rubli, che corrisponde a 172148,68 / 5090 = 33,82 contratti!

Che meraviglie...

1. Ti ho dato un esempio di come compilare correttamente la struttura, e tu ignori questo consiglio.

Allora perché me lo chiede?

2. La build 1194 non è compatibile con i server attuali (Renat ne ha parlato. Usa la build 1159 per ora).

3. Non uso affatto OrderCheck(), controllo io stesso i fondi.

//+------------------------------------------------------------------+
//| Expert Check money function                                      |
//+------------------------------------------------------------------+ 
bool CheckMoney( const string a_symbol, const long volume )
{
  if ( volume <= 0 )
  {
    Print( "Check Money: Объём лота указан не правильно!" );
    retutn ( false );
  } 
//---
  double a_go = SymbolInfoDouble( a_symbol, SYMBOL_MARGIN_INITIAL ) * double( volume);
  double free_margin = ( AccountInfoDouble( ACCOUNT_FREEMARGIN ) / 100 ) * 90; //90% от свободных средств
//---  
  if ( a_go <= free_margin )
  {
    return( true );
  }
  Print( "Check Money: Не достаточно средств!" );
  return( false );
}
 
Михаил:

1. Vi ho dato un esempio di come compilare correttamente la struttura e voi ignorate questo consiglio.

Perché me lo chiede allora?

2) La build 1194 non è compatibile con i server attuali (Renat ne ha parlato. Usa la build 1159 per ora).

3. Non uso affatto OrderCheck(), controllo io stesso i mezzi.


1. Non lo ignoro affatto. Non lo sto affatto ignorando. Ho incluso il tuo esempio nel codice, ora lo sto osservando.

2. Oh, cavolo! Non lo sapevo.

3. Ho fatto la stessa cosa. E la funzione è quasi esattamente la stessa, tranne il 90% (buona idea, a proposito).

Ho sollevato questa domanda perché la mia funzione (simile alla tua) controlla il CS e permette di aprire la posizione, mentre OrderCheck() standard a volte fallisce.


Probabilmente si riferisce al punto 2.

Nel log del terminale ci sono molti messaggi come:

2015.10.22 21:28:13.966 Ticks   old tick @RTS (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick RTS-12.15 (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick @RTS (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick RTS-12.15 (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick @RTS (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:28:13.966 Ticks   old tick RTS-12.15 (tick: 2015.10.22 18:28:21, last: 2015.10.22 18:28:22) 0/0
2015.10.22 21:27:40.995 Ticks   old tick @LKOH (tick: 2015.10.22 18:27:48, last: 2015.10.22 18:27:49) 0/0
2015.10.22 21:27:40.995 Ticks   old tick LKOH-12.15 (tick: 2015.10.22 18:27:48, last: 2015.10.22 18:27:49) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick Si-12.15 (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
2015.10.22 21:26:38.952 Ticks   old tick @Si (tick: 2015.10.22 18:26:46, last: 2015.10.22 18:26:47) 0/0
 
demonsn:


1. Perché dovrei ignorarlo? Non lo sto affatto ignorando. Ho incluso il tuo esempio nel codice, ora sto guardando.

2. Oh, cavolo! Non lo sapevo.

3. Ho fatto la stessa cosa. E la funzione è quasi esattamente la stessa, tranne il 90% (buona idea, a proposito)

Ho appunto sollevato questa domanda perché la mia funzione (simile alla tua) controlla il CS e permette di aprire la posizione, mentre OrderCheck() standard a volte si blocca.

Quindi usa il tuo su FORTS - è molto più corretto :)
 
Михаил:
Quindi usa tutto il tuo su FORTS - è molto più corretto :)

È così che si finisce per farlo! Tentato da qualche parte di usare il codice o la libreria di qualcun altro, per risparmiare tempo sulla scrittura di una "ruota" o testare qualche idea.

Ma alla fine devi passare una settimana a catturare gli errori e i difetti degli altri sviluppatori. Alla fine tutto viene riscritto per voi in modo che non ci sia traccia del codice di altre persone.

 

Ciao!

Le colle dei futures sono apparse nella finestra di prova, il che di per sé è molto piacevole, tuttavia, quando ho cercato di abbinare la colla con il contratto, ho scoperto che non ci sono affatto scambi sulla colla - tutto va bene sui contratti - ci sono un sacco di scambi. Ho controllato su quattro strumenti Si, RTS, GAZR, SBRF e il periodo 01.01.2015 -24.10.2015.

 
Andrey Kotrin:

Ciao!

Le colle dei futures sono apparse nella finestra di prova, il che di per sé è molto piacevole, tuttavia, quando ho cercato di abbinare la colla con il contratto, ho scoperto che non ci sono affatto scambi sulla colla - tutto va bene sui contratti - ci sono un sacco di scambi. Ho controllato su quattro strumenti Si, RTS, GAZR, SBRF e il periodo 01.01.2015 -24.10.2015.

Il tester non funziona correttamente sui futures.
Motivazione: