"New Neural" è un progetto di motore di rete neurale Open Source per la piattaforma MetaTrader 5. - pagina 32

 
Urain:
Lei è un po' equivoco.
Sei tu quello che ha frainteso :)
 
TheXpert:
Sei tu che hai capito male :)
Avanti, spiegamelo.
 
<?xml version="1.0"?>
<NET>

  <!-- Слой входных нейронов --> 

  <LAYER CLASS="INDICATOR" NAME="IND">
    <NEURON NAME="NEURON:01.IND"> 
      <INDICATOR> IN\MAD</INDICATOR> 
      <SYMBOL> EURUSD</SYMBOL> 
      <TIMEFRAME> M15</TIMEFRAME> 
      <BUFFER> 0</BUFFER> 
      <OFFSET> 1</OFFSET> 
      <PARAM NAME="BAR_COMPLETE" TYPE="INT"> 2</PARAM> 
      <PARAM NAME="FAST_PERIOD" TYPE="INT"> 12</PARAM> 
      <PARAM NAME="SLOW_PERIOD" TYPE="INT"> 26</PARAM> 
      <PARAM NAME="APPLIED_PRICE" TYPE="APPLIED_PRICE"> PRICE_CLOSE</PARAM> 
    </NEURON> 
    <NEURON NAME="NEURON:02.IND"> 
      <INDICATOR> IN\RSI</INDICATOR> 
      <SYMBOL> EURUSD</SYMBOL> 
      <TIMEFRAME> M15</TIMEFRAME> 
      <BUFFER> 0</BUFFER> 
      <OFFSET> 1</OFFSET> 
      <PARAM NAME="PERIOD" TYPE="INT"> 3</PARAM> 
      <PARAM NAME="APPLIED_PRICE" TYPE="APPLIED_PRICE"> PRICE_CLOSE</PARAM> 
    </NEURON> 
    <NEURON NAME="NEURON:03.IND"> 
      <INDICATOR> IN\MAD</INDICATOR> 
      <SYMBOL> EURUSD</SYMBOL> 
      <TIMEFRAME> M15</TIMEFRAME> 
      <BUFFER> 0</BUFFER> 
      <OFFSET> 1</OFFSET> 
      <PARAM NAME="BAR_COMPLETE" TYPE="INT"> 2</PARAM> 
      <PARAM NAME="FAST_PERIOD" TYPE="INT"> 54</PARAM> 
      <PARAM NAME="SLOW_PERIOD" TYPE="INT"> 100</PARAM> 
      <PARAM NAME="APPLIED_PRICE" TYPE="APPLIED_PRICE"> PRICE_CLOSE</PARAM> 
    </NEURON> 
  </LAYER>

  <!-- Слой #1 нейронов на гип.тангенсе --> 

  <LAYER CLASS="TANH" NAME="HID:0"> 
    <NEURON NAME="NEURON:01.HID:0" BIAS="-0.552589"> 
      <LINK WEIGHT="0.816961" TO="NEURON:01.IND"/> 
      <LINK WEIGHT="0.653045" TO="NEURON:02.IND"/> 
      <LINK WEIGHT="0.619305" TO="NEURON:03.IND"/> 
    </NEURON> 
    <NEURON NAME="NEURON:02.HID:0" BIAS="-0.443185"> 
      <LINK WEIGHT="0.478712" TO="NEURON:01.IND"/> 
      <LINK WEIGHT="0.147732" TO="NEURON:02.IND"/> 
      <LINK WEIGHT="-0.207846" TO="NEURON:03.IND"/> 
    </NEURON> 
  </LAYER> 

  <!-- Слой #2 нейронов на гип.тангенсе --> 

  <LAYER CLASS="TANH" NAME="HID:1"> 
    <NEURON NAME="NEURON:01.HID:1" BIAS="0.390295"> 
      <LINK WEIGHT="-0.683868" TO="NEURON:01.HID:0"/> 
      <LINK WEIGHT="-0.91081" TO="NEURON:02.HID:0"/> 
    </NEURON> 
    <NEURON NAME="NEURON:02.HID:1" BIAS="0.0347438"> 
      <LINK WEIGHT="-0.00688827" TO="NEURON:01.HID:0"/> 
      <LINK WEIGHT="-0.262435" TO="NEURON:02.HID:0"/> 
    </NEURON>
  </LAYER> 

  <!-- Выходной слой нейронов на гип.тангенсе --> 
  <LAYER CLASS="TANH" NAME="OUT"> 
    <NEURON NAME="EURUSD:LOT.OUT" BIAS="0.586392"> 
      <LINK WEIGHT="-0.812841" TO="NEURON:01.HID:1"/> 
      <LINK WEIGHT="0.0548534" TO="NEURON:02.HID:1"/> 
    </NEURON> 
  </LAYER> 

</NET>

//-----------------------------------------------------------------------------
//                                  CNeuron                                   !
//-----------------------------------------------------------------------------

class CNeuron {

public:
  
  // Constructor procedures 
  
  void          CNeuron ();
  virtual void ~CNeuron ();
  
  virtual bool Init (CXmlElement *aXmlElement, CNet *aNet);
  virtual void Upload ();
  
  // Main procedures 

  virtual bool Run ();
  virtual float GetValue ();
  
};


CNeuron* CreateNeuron(string aClass) {

  CNeuron *n=NULL;
  
  if (aClass=="")           n = new CNeuron;           else
  if (aClass=="BIAS")       n = new CNeuronBias;       else
  if (aClass=="INDICATOR")  n = new CNeuronIndicator;  else 
  if (aClass=="EXTERN")     n = new CNeuronService;    else 
  if (aClass=="MSE")        n = new CNeuronMSE;        else
  if (aClass=="PROFIT")     n = new CNeuronProfit;     else
  if (aClass=="LINEAR")     n = new CNeuronLinear;     else
  if (aClass=="SIGMOID")    n = new CNeuronSigmoid;    else
  if (aClass=="TANH")       n = new CNeuronTanh;       else
  if (aClass=="SIN")        n = new CNeuronSin;        else
  if (aClass=="COS")        n = new CNeuronCos;        else
  if (aClass=="DISTANCE")   n = new CNeuronDistance;   else
  if (aClass=="WINNER")     n = new CNeuronWinner; 

  return(n);
};
 
yu-sha:

Il salvataggio in XML è buono. Esiste un parser XML per MQL5?

Non puoi fare dllki.

 
TheXpert:

Il salvataggio in XML è buono. Esiste un parser XML per MQL5?

Non si può fare con le DLL.

L'ho fatto una volta - è rimasto qualcosa

ci vorranno 2 giorni.

puoi usare il parser msxml dalla dll standard, ma è molto impegnativo in termini di risorse.

P.S.

ogni entità dovrebbe essere in grado di inizializzarsi/salvarsi da/a XML

 
yu-sha:

XML è una buona idea, la sostengo. Puoi analizzare la griglia attraverso XSLT in codice canvas e visualizzarla sul web. Per esempio, collegatelo al motore del forum MQL5. Basta caricare il file nei commenti e l'intera topologia della griglia è a portata di mano.

Se MQL5 avesse il supporto per le espressioni reg, il parser sarebbe scritto in mezz'ora.

 
Vigore:
XML è una buona idea, la sostengo. È possibile analizzare la griglia tramite XSLT in codice canvas e visualizzarla sul web. Per esempio nel motore del forum MQL5. Carica il file nei commenti e l'intera topologia della griglia è a portata di mano.

Non sono arrivato subito a questo tipo di organizzazione - è stata una spina nel fianco

Ecco perché lo raccomando.

Avendo xml, si possono usare editor visuali di tutti i tipi, si possono scrivere i propri visualizzatori/configuratori.

 
Vigore:
XML è una buona cosa, lo sostengo, .......

+10000.

Vorrei che gli sviluppatori rendessero il più facile possibile lavorare con loro, rendendolo il più comodo possibile senza usare DLL e Win API aggiuntive (o meglio, nascondessero tutto nelle profondità del linguaggio, e ci dessero il MQL più pulito).

 
yu-sha:

Ogni entità dovrebbe essere in grado di inizializzare/salvare se stessa da/in XML

Probabilmente è meglio usare una fabbrica