<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MQLmagazine.com</title>
	<atom:link href="http://mqlmagazine.com/ro/feed/" rel="self" type="application/rss+xml" />
	<link>http://mqlmagazine.com/ro</link>
	<description>Sursa ta de MetaTrader</description>
	<lastBuildDate>Sat, 10 Jul 2010 16:10:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Linii directoare pentru scrierea expertilor de portofoliu in MQL5</title>
		<link>http://mqlmagazine.com/ro/programarea-in-mql/linii-directoar-pentru-scrierea-expertilor-de-portofoliu-in-mql5/</link>
		<comments>http://mqlmagazine.com/ro/programarea-in-mql/linii-directoar-pentru-scrierea-expertilor-de-portofoliu-in-mql5/#comments</comments>
		<pubDate>Mon, 24 May 2010 21:37:24 +0000</pubDate>
		<dc:creator>Bogdan Caramalac, MQLmagazine sr.editor</dc:creator>
				<category><![CDATA[Programarea in MQL]]></category>

		<guid isPermaLink="false">http://mqlmagazine.com/ro/?p=1613</guid>
		<description><![CDATA[[English version] [MQLmagazine.com in english] [Editia romaneasca]
Expertii de portofoliu, la fel ca si expertii multiasset, mai complecsi, au fost asteptati de comunitatea de retail trading de cand limitarile backtesterului MT4 au devenit evidente, adica de acum 4 &#8211; 5 ani. Diferenta intre expertii multiasset si cei de portofoliu e ca expertii multiasset au o strategie [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mqlmagazine.com/mql-programming/guidelines-for-writing-portfolio-expert-advisors-in-mql5" target="_top">[English version]</a> <a title="[MQLmagazine.com in english]" href="http://mqlmagazine.com" target="_top">[MQLmagazine.com in english]</a> <a title="[Editia romaneasca]" href="http://mqlmagazine.com/ro" target="_top">[Editia romaneasca]</a></p>
<p>Expertii de portofoliu, la fel ca si expertii multiasset, mai complecsi, au fost asteptati de comunitatea de retail trading de cand limitarile backtesterului MT4 au devenit evidente, adica de acum 4 &#8211; 5 ani. Diferenta intre expertii <em>multiasset</em> si cei <em>de portofoliu</em> e ca <em>expertii multiasset au o strategie integrata in care fiecare activ e o componenta</em>, in vreme ce <em>expertii de portofoliu replica aceeasi strategie, cu unele diferente parametrice, pe mai multe instrumente</em>. Bineinteles, in contextul MT4, expertii normali puteau fi rulati pe instrumente separate in vederea obtinerii <em>efectelor de portofoliu</em>,<br />
dar backtestingul n-ar fi putut niciodata acoperi aceste efecte de portofoliu pentru ca nu se putea face backtest pe mai mult decat pe un instrument.</p>
<p>Avantajul principal al portofolizarii este <em>impingerea rezultatului spre medie</em> concomitent cu <em>imprastierea riscului</em>. Gradul insa pana la care aceasta se intampla, e dependent de corelatia de ansamblu a portofoliului. Cu cat acest grad este mai mic, cu atat riscul nesistematic ramas de acoperit este mai mic. Totusi, daca nu alegi portofoliul cum trebuie, in loc sa aduca echilibru sistemului de trading pe ansamblu, va adauga instabilitate.</p>
<p>Un sistem de trading pe un portofoliu trebuie sa:<br />
- aplice o logica similara de trading la un numar mare de active;<br />
- diferentieze logica de trading de la un instrument la altul;<br />
- controleze expunerea.</p>
<p>E nevoie de o structura de date destul de mare pentru a face lucrurile controlabile:</p>
<p>De exemlu, aceasta:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p161311"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre></td><td class="code" id="p1613code11"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">input</span> <span style="color: #0000ff;">double</span> MarginUsagePerPosition<span style="color: #000080;">=</span><span style="color:#800080;">0.5</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">int</span> SymbolsCount<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> IndicatorHandlersStruct
  <span style="color: #008000;">&#123;</span>
   <span style="color: #808080;">//...</span>
  <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> SystemParametersStruct
  <span style="color: #008000;">&#123;</span>
   <span style="color: #808080;">//...</span>
  <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> SymbolData
  <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">string</span> <span style="color: #8a2be2;">Symbol</span><span style="color: #008080;">;</span>
    IndicatorHandlersStruct IndicatorHandlers<span style="color: #008080;">;</span>
    SystemParametersStruct SystemParameters<span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
SymbolData SymbolsTable<span style="color: #008000;">&#91;</span>300<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Prima variabila, MarginUsagePerPosition e un fel de parametru de alocare a activelor, controland volumul maxim pe fiecare pozitie. SymbolsCount va spune cate simboluri sunt folosite si pot fi folosite pentru enumerare, iar tabela mare SymbolsTable[]  va contine datele necesare, de la simboluri pana la handlere. De exemplu, urmatoarea structura va calcula 4 medii mobile (doua pe M5 si doua pe H1) pentru fiecare simbol.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p161312"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code" id="p1613code12"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">struct</span> IndicatorHandlersStruct
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">int</span> MovingAveragesHandlers14<span style="color: #008000;">&#91;</span>2<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> MovingAveragesHandlers9<span style="color: #008000;">&#91;</span>2<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> SymbolData
  <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">string</span> <span style="color: #8a2be2;">Symbol</span><span style="color: #008080;">;</span>
    IndicatorHandlersStruct IndicatorHandlers<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">datetime</span> LastBarTime<span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
SymbolData SymbolsTable<span style="color: #008000;">&#91;</span>300<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Inainte de OnInit() trebuie sa scriem o procedura care sa umple SymbolsTable[] cu handlerele indicatorilor.<br />
MakeIndicatorHandlers() este apelata din OnInit() pentru a separa setupul simbolurilor de setupul indicatorilor.<br />
Astfel poti modifica usor OnInit() pentru a schimba lista, prin adaugare, stergere sau introducerea unui selector automat de instrumente, dar MakeIndicatorHandlers() va ramane neschimbat, cu scopul de a umple structura cu handlerele necesare pentru indicatori.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p161313"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code" id="p1613code13"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">void</span> MakeIndicatorHandlers<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">datetime</span> lastbar<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>SymbolsCount<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>
       SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">MovingAverageHandlers14</span><span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #008000;">iTEMA</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">PERIOD_M5</span>,14,0,<span style="color: #333399;">PRICE_OPEN</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">MovingAverageHandlers9</span><span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #008000;">iTEMA</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">PERIOD_M5</span>,9,0,<span style="color: #333399;">PRICE_OPEN</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">MovingAverageHandlers14</span><span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #008000;">iTEMA</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">PERIOD_H1</span>,14,0,<span style="color: #333399;">PRICE_OPEN</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">MovingAverageHandlers9</span><span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #008000;">iTEMA</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">PERIOD_H1</span>,9,0,<span style="color: #333399;">PRICE_OPEN</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>  
      <span style="color: #008000;">&#125;</span>
   <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>In interiorul OnInit(), setam tabela simbolurilor. De exemplu, o facem sa mearga cu trei perechi forex: EURUSD, USDCHF, GBPJPY:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p161314"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code" id="p1613code14"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">int</span> OnInit<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   SymbolsTable<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;EURUSD&quot;</span><span style="color: #008080;">;</span>
   SymbolsTable<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;USDCHF&quot;</span><span style="color: #008080;">;</span>
   SymbolsTable<span style="color: #008000;">&#91;</span>2<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;GBPJPY&quot;</span><span style="color: #008080;">;</span>
   SymbolsCount<span style="color: #000080;">=</span><span style="color: #008000;">3</span><span style="color: #008080;">;</span>
   MakeIndicatorHandlers<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Si acum OnTick():</p>

<div class="wp_codebox"><table width="100%" ><tr id="p161315"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code" id="p1613code15"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">void</span> OnTick<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">datetime</span> datetime_array<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>SymbolsCount<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>
       <span style="color: #8a2be2;">CopyTime</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">PERIOD_M5</span>,0,1,datetime_array<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>datetime_array<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">LastBarTime</span><span style="color: #008000;">&#41;</span>
         <span style="color: #008000;">&#123;</span>               
          TradeLogics<span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
          LastBarTime<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>datetime_array<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>    
         <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (datetime_array[0]!=SymbolsTable[i].LastBarTime)</span>
      <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (int i=0;i&lt;SymbolsCount;i++)</span>
   <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Acum toate piesele sunt complete. OnTick() va verifica pentru fiecare instrument daca o noua bara a aparut si va apela TradeLogics() pentru fiecare instrument din tablou, care va implementa decizia si tradingul.</p>
<p>Nu ne vom opri asupra TradeLogics() in acest articol, pentru ca TradeLogics() e specific fiecarui EA. Dar cateva principii trebuie sa fie ghid la scrierea TradeLogics(). Prima diviziune a TradeLogics() este clasa de active cu care lucreaza. Nu poate lucra cu actiuni cum lucreaza cu forex. Actiunile nu se tranzactioneaza 24 de ore zi, 5 zile pe saptamana. Au sesiuni specifice si salturi pe chart de la o zi la alta, ca sa nu mai zic de la o saptamana la alta. A doua, e aceea ca e mai bine sa separam functiile de trading de TradeLogics(). De exemplu, TradeLogics() poate comanda cum sa se ajusteze pozitia pentru un anumit instrument, lasand functia de tranzactionare procedurii ManagePosition(). Bineinteles, TradeLogics() poate fi lansat in practica si de OnTrade() sau OnChartEvent(), poate chiar si de metoda <a title="EventsCallback()" href="http://mqlmagazine.com/ro/modelare-financiara/anatomia-unui-motor-cep-simplu/" target="_top">EventsCallback()</a> a unui motor CEP.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p161316"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
</pre></td><td class="code" id="p1613code16"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">double</span> UnitsToLots<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span> units,<span style="color: #0000ff;">string</span> symbol<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
  <span style="color: #0000ff;">double</span> dlotsize<span style="color: #000080;">=</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>symbol,<span style="color: #333399;">SYMBOL_TRADE_CONTRACT_SIZE</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #0000ff;">double</span> mag<span style="color: #000080;">=</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>symbol,<span style="color: #333399;">SYMBOL_VOLUME_STEP</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #0000ff;">double</span> mini<span style="color: #000080;">=</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>symbol,<span style="color: #333399;">SYMBOL_VOLUME_MIN</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #0000ff;">double</span> big<span style="color: #000080;">=</span>1<span style="color: #000040;">/</span>mag<span style="color: #008080;">;</span>    
  <span style="color: #0000ff;">double</span> size<span style="color: #000080;">=</span>dlotsize<span style="color: #000040;">/</span>big<span style="color: #008080;">;</span>
  <span style="color: #0000ff;">double</span> dlots0,dlots1,back0,back1<span style="color: #008080;">;</span>
  dlots0<span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span>units<span style="color: #000040;">/</span>size,0<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>mag<span style="color: #008080;">;</span>
  dlots1<span style="color: #000080;">=</span>dlots0<span style="color: #000040;">+</span>mag<span style="color: #008080;">;</span>
  back0<span style="color: #000080;">=</span>dlots0<span style="color: #000040;">*</span>big<span style="color: #000040;">*</span>size<span style="color: #008080;">;</span>
  back1<span style="color: #000080;">=</span>dlots1<span style="color: #000040;">*</span>big<span style="color: #000040;">*</span>size<span style="color: #008080;">;</span>
  <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>back1<span style="color: #000040;">-</span>units<span style="color: #000080;">&lt;</span>units<span style="color: #000040;">-</span>back0<span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
     <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>dlots1<span style="color: #000080;">&lt;</span>mini<span style="color: #008000;">&#41;</span>
       <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>mini<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>  
     else  
       <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>dlots1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
  else
    <span style="color: #008000;">&#123;</span>
     <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>dlots0<span style="color: #000080;">==</span>0<span style="color: #008000;">&#41;</span>
        <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>mini<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
     else
       <span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>dlots0<span style="color: #000080;">&lt;</span>mini<span style="color: #008000;">&#41;</span>
          <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>mini<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        else
          <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>dlots0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       <span style="color: #008000;">&#125;</span><span style="color: #808080;">//else if (dlots0==0)</span>
    <span style="color: #008000;">&#125;</span><span style="color: #808080;">//else if if (back1-units&lt;units-back0)</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>UnitsToLots() este o portare a unei functii pe care am scris-o in vremurile MQL4, si care functiona la acea vreme cu MarketInfo(). UnitsToLots() va intoarce numarul de loturi ce corespunde unui volum dat in unitati. De exemplu poate raspunde 1.0 pentru 100000 unitati pe EURUSD.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p161317"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="code" id="p1613code17"><pre class="mql5" style="font-family:monospace;"><span style="color: #339900;">#define FLAT        0</span>
<span style="color: #339900;">#define LONG        1</span>
<span style="color: #339900;">#define SHORT       2</span>
&nbsp;
<span style="color: #0000ff;">int</span> GetPositionType<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> asset_index<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">string</span> symbol<span style="color: #000080;">=</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">bool</span> sel<span style="color: #000080;">=</span><span style="color: #8a2be2;">PositionSelect</span><span style="color: #008000;">&#40;</span>symbol<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>sel<span style="color: #000080;">==</span><span style="color: #333399;">false</span><span style="color: #008000;">&#41;</span>
     <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>FLAT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   else
    <span style="color: #008000;">&#123;</span>
     <span style="color: #0000ff;">long</span> p<span style="color: #000080;">=</span><span style="color: #8a2be2;">PositionGetInteger</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">POSITION_TYPE</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
     <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">==</span><span style="color: #333399;">POSITION_TYPE_BUY</span><span style="color: #008000;">&#41;</span>
       <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>LONG<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
     else
       <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>SHORT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Aceasta functie este un proxy simplu pentru a obtine un raspuns clar privind tipul unei pozitii. Valoarea pentru POSITION_TYPE_BUY este 0 in MQL5, iar PositionInfoInteger() va raspunde 0 chiar daca pozitia nu a fost selectata inainte de apelare.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p161318"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
</pre></td><td class="code" id="p1613code18"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">void</span> ManagePosition<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> asset_index,<span style="color: #0000ff;">int</span> operation,<span style="color: #0000ff;">double</span> forcevolume<span style="color: #000080;">=</span>0.00<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>   
   MqlTradeRequest request<span style="color: #008080;">;</span>
   MqlTradeResult result<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> p<span style="color: #000080;">=</span>GetPositionType<span style="color: #008000;">&#40;</span>asset_index<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">double</span> now_volume<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">double</span> current_volume,v0<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">PositionSelect</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span>
     current_volume<span style="color: #000080;">=</span><span style="color: #8a2be2;">PositionGetDouble</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">POSITION_VOLUME</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   else
     current_volume<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
   v0<span style="color: #000080;">=</span>current_volume<span style="color: #008080;">;</span>   
   request.<span style="color: #007788;">action</span><span style="color: #000080;">=</span><span style="color: #333399;">TRADE_ACTION_DEAL</span><span style="color: #008080;">;</span>
   request.<span style="color: #007788;">symbol</span><span style="color: #000080;">=</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span><span style="color: #008080;">;</span> 
   request.<span style="color: #007788;">deviation</span><span style="color: #000080;">=</span>Slippage<span style="color: #008080;">;</span>
   request.<span style="color: #007788;">type_filling</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_FILLING_AON</span><span style="color: #008080;">;</span>
   request.<span style="color: #007788;">type_time</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_TIME_GTC</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">==</span>FLAT<span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>forcevolume,<span style="color: #008000;">2</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #008080;">&quot;0.00&quot;</span><span style="color: #008000;">&#41;</span>
        request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span>UnitsToLots<span style="color: #008000;">&#40;</span> <span style="color: #008000;">&#40;</span>MarginUsagePerPosition<span style="color: #000040;">/</span>100<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #8a2be2;">AccountInfoDouble</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">ACCOUNT_EQUITY</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #8a2be2;">AccountInfoInteger</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">ACCOUNT_LEVERAGE</span><span style="color: #008000;">&#41;</span>,SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      else
        request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span>forcevolume<span style="color: #008080;">;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>operation<span style="color: #000080;">==</span>LONG<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
         request.<span style="color: #007788;">type</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_TYPE_BUY</span><span style="color: #008080;">;</span>
         request.<span style="color: #007788;">price</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_ASK</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>operation<span style="color: #000080;">==</span>SHORT<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
         request.<span style="color: #007788;">type</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_TYPE_SELL</span><span style="color: #008080;">;</span>
         request.<span style="color: #007788;">price</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_BID</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>operation<span style="color: #000080;">==</span>FLAT<span style="color: #008000;">&#41;</span>
        <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
     <span style="color: #008000;">&#125;</span>
   else<span style="color: #808080;">//if (p==FLAT)</span>
     <span style="color: #008000;">&#123;</span>     
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">==</span>LONG<span style="color: #000040;">&amp;&amp;</span>operation<span style="color: #000080;">==</span>SHORT<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>forcevolume,<span style="color: #008000;">2</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #008080;">&quot;0.00&quot;</span><span style="color: #008000;">&#41;</span>
           request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span>current_volume<span style="color: #000040;">+</span>UnitsToLots<span style="color: #008000;">&#40;</span> <span style="color: #008000;">&#40;</span>MarginUsagePerPosition<span style="color: #000040;">/</span>100<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #8a2be2;">AccountInfoDouble</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">ACCOUNT_EQUITY</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #8a2be2;">AccountInfoInteger</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">ACCOUNT_LEVERAGE</span><span style="color: #008000;">&#41;</span>,SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
         else
           request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span>current_volume<span style="color: #000040;">+</span>forcevolume<span style="color: #008080;">;</span>
         request.<span style="color: #007788;">type</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_TYPE_SELL</span><span style="color: #008080;">;</span>         
         request.<span style="color: #007788;">price</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_BID</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>         
        <span style="color: #008000;">&#125;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">==</span>SHORT<span style="color: #000040;">&amp;&amp;</span>operation<span style="color: #000080;">==</span>LONG<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>forcevolume,<span style="color: #008000;">2</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #008080;">&quot;0.00&quot;</span><span style="color: #008000;">&#41;</span>         
           request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span>current_volume<span style="color: #000040;">+</span>UnitsToLots<span style="color: #008000;">&#40;</span> <span style="color: #008000;">&#40;</span>MarginUsagePerPosition<span style="color: #000040;">/</span>100<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #8a2be2;">AccountInfoDouble</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">ACCOUNT_EQUITY</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #8a2be2;">AccountInfoInteger</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">ACCOUNT_LEVERAGE</span><span style="color: #008000;">&#41;</span>,SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
         else
           request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span>current_volume<span style="color: #000040;">+</span>forcevolume<span style="color: #008080;">;</span>
         request.<span style="color: #007788;">type</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_TYPE_BUY</span><span style="color: #008080;">;</span>
         request.<span style="color: #007788;">price</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_ASK</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">==</span>LONG<span style="color: #000040;">&amp;&amp;</span>operation<span style="color: #000080;">==</span>FLAT<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>       
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>forcevolume,<span style="color: #008000;">2</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #008080;">&quot;0.00&quot;</span><span style="color: #008000;">&#41;</span>
           request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span>current_volume<span style="color: #008080;">;</span>
         else
           request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span>forcevolume<span style="color: #008080;">;</span>
         request.<span style="color: #007788;">type</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_TYPE_SELL</span><span style="color: #008080;">;</span>         
         request.<span style="color: #007788;">price</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_BID</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>         
        <span style="color: #008000;">&#125;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">==</span>SHORT<span style="color: #000040;">&amp;&amp;</span>operation<span style="color: #000080;">==</span>FLAT<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>forcevolume,<span style="color: #008000;">2</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #008080;">&quot;0.00&quot;</span><span style="color: #008000;">&#41;</span>           
           request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span>current_volume<span style="color: #008080;">;</span>
         else
           request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span>forcevolume<span style="color: #008080;">;</span>
         request.<span style="color: #007788;">type</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_TYPE_BUY</span><span style="color: #008080;">;</span>         
         request.<span style="color: #007788;">price</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_ASK</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>         
        <span style="color: #008000;">&#125;</span> 
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">==</span>LONG<span style="color: #000040;">&amp;&amp;</span>operation<span style="color: #000080;">==</span>LONG<span style="color: #008000;">&#41;</span><span style="color: #808080;">//adjustment of the present LONG position</span>
        <span style="color: #008000;">&#123;</span>
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>forcevolume,<span style="color: #008000;">2</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #008080;">&quot;0.00&quot;</span><span style="color: #008000;">&#41;</span>
           request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span>UnitsToLots<span style="color: #008000;">&#40;</span> <span style="color: #008000;">&#40;</span>MarginUsagePerPosition<span style="color: #000040;">/</span>100<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #8a2be2;">AccountInfoDouble</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">ACCOUNT_EQUITY</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #8a2be2;">AccountInfoInteger</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">ACCOUNT_LEVERAGE</span><span style="color: #008000;">&#41;</span>,SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span> <span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span>current_volume<span style="color: #008080;">;</span>
         else
           request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span>forcevolume<span style="color: #000040;">-</span>current_volume<span style="color: #008080;">;</span>
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span>request.<span style="color: #007788;">volume</span>,2<span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;</span>0.00<span style="color: #008000;">&#41;</span>
           <span style="color: #008000;">&#123;</span>         
            request.<span style="color: #007788;">type</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_TYPE_BUY</span><span style="color: #008080;">;</span>
            request.<span style="color: #007788;">price</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_ASK</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
           <span style="color: #008000;">&#125;</span>
         else <span style="color: #808080;">//we close the difference</span>
           <span style="color: #008000;">&#123;</span>
            request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">MathAbs</span><span style="color: #008000;">&#40;</span>request.<span style="color: #007788;">volume</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            request.<span style="color: #007788;">type</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_TYPE_SELL</span><span style="color: #008080;">;</span>         
            request.<span style="color: #007788;">price</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_BID</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>         
           <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>        
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">==</span>SHORT<span style="color: #000040;">&amp;&amp;</span>operation<span style="color: #000080;">==</span>SHORT<span style="color: #008000;">&#41;</span><span style="color: #808080;">//adjustment of the present SHORT position</span>
        <span style="color: #008000;">&#123;</span>
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>forcevolume,<span style="color: #008000;">2</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #008080;">&quot;0.00&quot;</span><span style="color: #008000;">&#41;</span>
           request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span>UnitsToLots<span style="color: #008000;">&#40;</span> <span style="color: #008000;">&#40;</span>MarginUsagePerPosition<span style="color: #000040;">/</span>100<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #8a2be2;">AccountInfoDouble</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">ACCOUNT_EQUITY</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #8a2be2;">AccountInfoInteger</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">ACCOUNT_LEVERAGE</span><span style="color: #008000;">&#41;</span>,SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span> <span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span>current_volume<span style="color: #008080;">;</span>
         else
           request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span>forcevolume<span style="color: #000040;">-</span>current_volume<span style="color: #008080;">;</span>
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span>request.<span style="color: #007788;">volume</span>,2<span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;</span>0.00<span style="color: #008000;">&#41;</span>
           <span style="color: #008000;">&#123;</span>
            request.<span style="color: #007788;">type</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_TYPE_SELL</span><span style="color: #008080;">;</span>         
            request.<span style="color: #007788;">price</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_BID</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                  
           <span style="color: #008000;">&#125;</span>
         else
           <span style="color: #008000;">&#123;</span>
            request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">MathAbs</span><span style="color: #008000;">&#40;</span>request.<span style="color: #007788;">volume</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            request.<span style="color: #007788;">type</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_TYPE_BUY</span><span style="color: #008080;">;</span>
            request.<span style="color: #007788;">price</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_ASK</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>            
           <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>        
     <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (p==FLAT)]  </span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>request.<span style="color: #007788;">volume</span>,<span style="color: #008000;">2</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;0.00&quot;</span><span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      <span style="color: #8a2be2;">OrderSend</span><span style="color: #008000;">&#40;</span>request,result<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>     
      PositionSetSLTP<span style="color: #008000;">&#40;</span>StopLoss,TakeProfit<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
     <span style="color: #008000;">&#125;</span>     
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Ce face ManagePosition() ? Deschide o pozitie pentru activul dat prin index, la cerere, daca este inchisa dinainte (mai bine zis, &#8220;aplatizata&#8221;) ; sau inverseaza pozitia curenta, prin calcularea noii marime a lotului (o calculeaza cu formula, adauga la volumul curent si inverseaza operatiunea). Poate adauga sau taia din pozitia curenta. Parametrul forcevolume poate fi folosit pentru a forta un anumit volum a fi tranzactionat, sarind calculul. Ce parere ai de un stop loss ? Nimic mai usor:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p161319"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
</pre></td><td class="code" id="p1613code19"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">void</span> PositionSetSLTP<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> asset_index,<span style="color: #0000ff;">int</span> sl,<span style="color: #0000ff;">int</span> tp<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">bool</span> todosl, todotp<span style="color: #008080;">;</span>
   MqlTradeRequest request<span style="color: #008080;">;</span>
   MqlTradeResult result<span style="color: #008080;">;</span>   
   <span style="color: #0000ff;">double</span> price<span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> p<span style="color: #000080;">=</span>GetPositionType<span style="color: #008000;">&#40;</span>asset_index<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">==</span>LONG<span style="color: #000040;">||</span>p<span style="color: #000080;">==</span>SHORT<span style="color: #008000;">&#41;</span>
     price<span style="color: #000080;">=</span><span style="color: #8a2be2;">PositionGetDouble</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">POSITION_PRICE_OPEN</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   request.<span style="color: #007788;">action</span><span style="color: #000080;">=</span><span style="color: #333399;">TRADE_ACTION_SLTP</span><span style="color: #008080;">;</span>
   request.<span style="color: #007788;">symbol</span><span style="color: #000080;">=</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span><span style="color: #008080;">;</span>   
   todosl<span style="color: #000080;">=</span><span style="color: #333399;">false</span><span style="color: #008080;">;</span>
   todotp<span style="color: #000080;">=</span><span style="color: #333399;">false</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>sl,<span style="color: #008000;">4</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;0.0000&quot;</span><span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      todosl<span style="color: #000080;">=</span><span style="color: #333399;">true</span><span style="color: #008080;">;</span>      
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">==</span>LONG<span style="color: #008000;">&#41;</span>
        request.<span style="color: #007788;">sl</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span>price<span style="color: #000040;">-</span>sl<span style="color: #000040;">*</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_POINT</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">==</span>SHORT<span style="color: #008000;">&#41;</span>
        request.<span style="color: #007788;">sl</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span>price<span style="color: #000040;">+</span>sl<span style="color: #000040;">*</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_POINT</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
     <span style="color: #008000;">&#125;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>tp,<span style="color: #008000;">4</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;0.0000&quot;</span><span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>      
      todotp<span style="color: #000080;">=</span><span style="color: #333399;">true</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">==</span>LONG<span style="color: #008000;">&#41;</span>
        request.<span style="color: #007788;">tp</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span>price<span style="color: #000040;">+</span>tp<span style="color: #000040;">*</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_POINT</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">==</span>SHORT<span style="color: #008000;">&#41;</span>
        request.<span style="color: #007788;">tp</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span>price<span style="color: #000040;">-</span>tp<span style="color: #000040;">*</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_POINT</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
     <span style="color: #008000;">&#125;</span>
   request.<span style="color: #007788;">deviation</span><span style="color: #000080;">=</span>Slippage<span style="color: #008080;">;</span>   
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>todosl<span style="color: #000080;">==</span><span style="color: #333399;">true</span><span style="color: #000040;">||</span>todotp<span style="color: #000080;">==</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span>
     <span style="color: #8a2be2;">OrderSend</span><span style="color: #008000;">&#40;</span>request,result<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>De observat ca apelurile la OrderSend() nu sunt urmate de o analiza a rezultatului. Nu ne-am scufundat in analiza codurilor de intoarcere pentru ca unele dintre ele nu sunt complet clare.</p>
<p>Si in final OnDeinit(), care distruge handlerele indicatorilor.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p161320"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code" id="p1613code20"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">void</span> OnDeinit<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> reason<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>SymbolsCount<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>   
       <span style="color: #8a2be2;">IndicatorRelease</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">MovingAverageHandlers14</span><span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       <span style="color: #8a2be2;">IndicatorRelease</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">MovingAverageHandlers9</span><span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       <span style="color: #8a2be2;">IndicatorRelease</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">MovingAverageHandlers14</span><span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       <span style="color: #8a2be2;">IndicatorRelease</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">MovingAverageHandlers9</span><span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #008000;">&#125;</span>
   <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://mqlmagazine.com/ro/programarea-in-mql/linii-directoar-pentru-scrierea-expertilor-de-portofoliu-in-mql5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MQL5 : Un expert demonstrativ de portofoliu folosind medii mobile</title>
		<link>http://mqlmagazine.com/ro/programarea-in-mql/mql5-un-expert-demonstrativ-de-portofoliu-folosind-medii-mobile/</link>
		<comments>http://mqlmagazine.com/ro/programarea-in-mql/mql5-un-expert-demonstrativ-de-portofoliu-folosind-medii-mobile/#comments</comments>
		<pubDate>Mon, 24 May 2010 21:37:08 +0000</pubDate>
		<dc:creator>Bogdan Caramalac, MQLmagazine sr.editor</dc:creator>
				<category><![CDATA[Programarea in MQL]]></category>

		<guid isPermaLink="false">http://mqlmagazine.com/ro/?p=1637</guid>
		<description><![CDATA[[English version] [MQLmagazine.com in english] [Editia romaneasca]
Am scris acest expert ca o demonstratie completa privind scrierea expertilor de portofoliu, urmarind principiile prezentate in Linii directoare pentru scrierea expertilor de portofoliu in MQL5.
Expertul va lucra pe timeframe-ul ales, numai cand o bara noua se formeaza pe fiecare instrument participant. Dupa verificarea intersectiilor de medii mobile, va [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mqlmagazine.com/mql-programming/mql5-a-portfolio-moving-average-sample-expert" target="_top">[English version]</a> <a title="[MQLmagazine.com in english]" href="http://mqlmagazine.com" target="_top">[MQLmagazine.com in english]</a> <a title="[Editia romaneasca]" href="http://mqlmagazine.com/ro" target="_top">[Editia romaneasca]</a></p>
<p>Am scris acest expert ca o demonstratie completa privind scrierea expertilor de portofoliu, urmarind principiile prezentate in <a href="http://mqlmagazine.com/ro/programarea-in-mql/linii-directoare-pentru-scrierea-expertilor-de-portofoliu-in-mql5" target="_top">Linii directoare pentru scrierea expertilor de portofoliu in MQL5</a>.</p>
<p>Expertul va lucra pe timeframe-ul ales, numai cand o bara noua se formeaza pe fiecare instrument participant. Dupa verificarea intersectiilor de medii mobile, va administra pozitiile. Exista si optiunea de a filtra dupa volatilitate (am reparat indicatorul BBoverSTD din articolul <a title="Analiza volatilitatii : de la previziunea volatilitatii la previziunea pretului" href="http://mqlmagazine.com/ro/programarea-in-mql/analiza-volatilitatii-de-la-previziunea-volatilitatii-la-previziunea-pretului/" target="_top">Analiza volatilitatii : de la previziunea volatilitatii la previziunea pretului</a>).</p>

<div class="wp_codebox"><table width="100%" ><tr id="p163729"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code" id="p1637code29"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//|                                                  PortfolioMA.mq5 |</span>
<span style="color: #808080;">//|                                       Copyright Bogdan Caramalac |</span>
<span style="color: #808080;">//|                                           http://mqlmagazine.com |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #339900;">#property copyright &quot;Copyright Bogdan Caramalac&quot;</span>
<span style="color: #339900;">#property link      &quot;http://mqlmagazine.com&quot;</span>
<span style="color: #339900;">#property version   &quot;1.00&quot;</span>
&nbsp;
<span style="color: #339900;">#define FLAT        0</span>
<span style="color: #339900;">#define LONG        1</span>
<span style="color: #339900;">#define SHORT       2</span>
&nbsp;
<span style="color: #0000ff;">input</span> <span style="color: #0000ff;">int</span> Slippage<span style="color: #000080;">=</span><span style="color: #008000;">30</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">input</span> <span style="color: #0000ff;">double</span> MarginUsagePerPosition<span style="color: #000080;">=</span><span style="color:#800080;">0.5</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">input</span> <span style="color: #0000ff;">bool</span> VolatilityFilter<span style="color: #000080;">=</span><span style="color: #333399;">false</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">input</span> <span style="color: #0000ff;">int</span> StopLoss<span style="color: #000080;">=</span><span style="color: #008000;">300</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">input</span> <span style="color: #0000ff;">int</span> TakeProfit<span style="color: #000080;">=</span><span style="color: #008000;">1000</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">input</span> <span style="color: #0000ff;">int</span> SlowMALength<span style="color: #000080;">=</span><span style="color: #008000;">14</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">input</span> <span style="color: #0000ff;">int</span> FastMALength<span style="color: #000080;">=</span><span style="color: #008000;">9</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Aceasta sectiune defineste constantele pentru lucrul cu pozitii (FLAT,LONG,SHORT) si parametrii sistemului.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p163730"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code" id="p1637code30"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">int</span> SymbolsCount<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> IndicatorHandlersStruct
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">int</span> SlowMovingAverageHandler<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> FastMovingAverageHandler<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> BBoverSTDHandler<span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> SymbolData
  <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">string</span> <span style="color: #8a2be2;">Symbol</span><span style="color: #008080;">;</span>
    IndicatorHandlersStruct IndicatorHandlers<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">datetime</span> LastBarTime<span style="color: #008080;">;</span>    
  <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
SymbolData SymbolsTable<span style="color: #008000;">&#91;</span>30<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Aceasta sectiune defineste structura de date care retine simbolurile si handlerele indicatorilor.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p163731"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
</pre></td><td class="code" id="p1637code31"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">void</span> MakeIndicatorHandlers<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">int</span> error1,error2,error3<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>SymbolsCount<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>
       error1<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
       error2<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
       error3<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
       SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">SlowMovingAverageHandler</span><span style="color: #000080;">=</span><span style="color: #008000;">iMA</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #8a2be2;">Period</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,SlowMALength,0,<span style="color: #333399;">MODE_SMA</span>,<span style="color: #333399;">PRICE_OPEN</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;SymbolsTable[&quot;</span>,i,<span style="color: #008080;">&quot;].IndicatorHandlers.SlowMovingAverageHandler=&quot;</span>,SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">SlowMovingAverageHandler</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">SlowMovingAverageHandler</span><span style="color: #000080;">&lt;</span>0<span style="color: #008000;">&#41;</span>
         <span style="color: #008000;">&#123;</span> 
          <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;Invalid handle.&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
          error1<span style="color: #000080;">=</span><span style="color: #8a2be2;">GetLastError</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
          <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;Error &quot;</span>,error1,<span style="color: #008080;">&quot; while initializing iMA(&quot;</span>,SlowMALength,<span style="color: #008080;">&quot;) for &quot;</span>,SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
         <span style="color: #008000;">&#125;</span>
       SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">FastMovingAverageHandler</span><span style="color: #000080;">=</span><span style="color: #008000;">iMA</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #8a2be2;">Period</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,FastMALength,0,<span style="color: #333399;">MODE_SMA</span>,<span style="color: #333399;">PRICE_OPEN</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;SymbolsTable[&quot;</span>,i,<span style="color: #008080;">&quot;].IndicatorHandlers.FastMovingAverageHandler=&quot;</span>,SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">FastMovingAverageHandler</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">FastMovingAverageHandler</span><span style="color: #000080;">&lt;</span>0<span style="color: #008000;">&#41;</span>
         <span style="color: #008000;">&#123;</span>
          <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;Invalid handle.&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
          error2<span style="color: #000080;">=</span><span style="color: #8a2be2;">GetLastError</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
          <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;Error &quot;</span>,error2,<span style="color: #008080;">&quot; while initializing iMA(&quot;</span>,FastMALength,<span style="color: #008080;">&quot;) for &quot;</span>,SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
         <span style="color: #008000;">&#125;</span>
       SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">BBoverSTDHandler</span><span style="color: #000080;">=</span><span style="color: #008000;">iCustom</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #8a2be2;">Period</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,<span style="color: #008080;">&quot;BBoverSTD&quot;</span>,<span style="color: #008000;">20</span>,<span style="color: #008000;">10</span>,<span style="color:#800080;">1.5</span>,<span style="color: #008080;">&quot;SMA&quot;</span>,2,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;SymbolsTable[&quot;</span>,i,<span style="color: #008080;">&quot;].IndicatorHandlers.BBoverSTDHandler=&quot;</span>,SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">BBoverSTDHandler</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">BBoverSTDHandler</span><span style="color: #000080;">&lt;</span>0<span style="color: #008000;">&#41;</span>
         <span style="color: #008000;">&#123;</span> 
          <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;Invalid handle.&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
          error3<span style="color: #000080;">=</span><span style="color: #8a2be2;">GetLastError</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
          <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;Error &quot;</span>,error3,<span style="color: #008080;">&quot; while initializing BBoverSTD for &quot;</span>,SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
         <span style="color: #008000;">&#125;</span>                   
      <span style="color: #008000;">&#125;</span>
   <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Aceasta este procedura MakeIndicatorHandlers() adaptata nevoilor acestui expert.</p>
<p>Acum urmeaza UnitsToLots(), GetPositionType(), PositionSetSLTP() si ManagePosition() care sunt cele prezentate in <a href="http://mqlmagazine.com/ro/programarea-in-mql/linii-directoare-pentru-scrierea-expertilor-de-portofoliu-in-mql5" target="_top">Linii directoare pentru scrierea expertilor de portofoliu in MQL5</a>.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p163732"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
</pre></td><td class="code" id="p1637code32"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">string</span> MASignal<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> asset_index<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">double</span> maslowarray<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">double</span> mafastarray<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">double</span> mafast,maslow<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">datetime</span> t<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> copycount1,copycount2<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> error1<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> error2<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">string</span> signal<span style="color: #008080;">;</span>
   copycount1<span style="color: #000080;">=</span><span style="color: #8a2be2;">CopyBuffer</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">SlowMovingAverageHandler</span>,0,0,1,maslowarray<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>copycount1<span style="color: #000080;">==</span><span style="color: #000040;">-</span>1<span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;Nothing copied (1). Retrieving error.&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      error1<span style="color: #000080;">=</span><span style="color: #8a2be2;">GetLastError</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
     <span style="color: #008000;">&#125;</span>
   copycount2<span style="color: #000080;">=</span><span style="color: #8a2be2;">CopyBuffer</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">FastMovingAverageHandler</span>,0,0,1,mafastarray<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>copycount2<span style="color: #000080;">==</span><span style="color: #000040;">-</span>1<span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;Nothing copied (2). Retrieving error.&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      error2<span style="color: #000080;">=</span><span style="color: #8a2be2;">GetLastError</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
     <span style="color: #008000;">&#125;</span>
   maslow<span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span>maslowarray<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   mafast<span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span>mafastarray<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>   
   t<span style="color: #000080;">=</span><span style="color: #8a2be2;">TimeCurrent</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>maslow<span style="color: #000080;">&lt;</span>mafast<span style="color: #008000;">&#41;</span>
     signal<span style="color: #000080;">=</span><span style="color: #008080;">&quot;L&quot;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>maslow<span style="color: #000080;">==</span>mafast<span style="color: #008000;">&#41;</span>
     signal<span style="color: #000080;">=</span><span style="color: #008080;">&quot;-&quot;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>maslow<span style="color: #000080;">&gt;</span>mafast<span style="color: #008000;">&#41;</span>
     signal<span style="color: #000080;">=</span><span style="color: #008080;">&quot;S&quot;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>signal<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Aceasta intoarce semnalul mediei mobile pentru activul solicitat. Semnalul poate fi &#8220;L&#8221;,&#8221;S&#8221; sau &#8220;-&#8221;.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p163733"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
</pre></td><td class="code" id="p1637code33"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">void</span> TradeLogics<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> asset_index<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">string</span> s<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">double</span> stddev<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">double</span> bbhi<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">double</span> bblo<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> copycount<span style="color: #008080;">;</span>
   s<span style="color: #000080;">=</span>MASignal<span style="color: #008000;">&#40;</span>asset_index<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>   
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VolatilityFilter<span style="color: #000080;">==</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      copycount<span style="color: #000080;">=</span><span style="color: #8a2be2;">CopyBuffer</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">BBoverSTDHandler</span>,0,0,1,stddev<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      copycount<span style="color: #000080;">=</span><span style="color: #8a2be2;">CopyBuffer</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">BBoverSTDHandler</span>,2,0,1,bbhi<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
     <span style="color: #008000;">&#125;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>GetPositionType<span style="color: #008000;">&#40;</span>asset_index<span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span>FLAT<span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>      
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s<span style="color: #000080;">==</span><span style="color: #008080;">&quot;L&quot;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VolatilityFilter<span style="color: #000080;">==</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span>
           <span style="color: #008000;">&#123;</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>stddev<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span>bbhi<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
              ManagePosition<span style="color: #008000;">&#40;</span>asset_index,LONG<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
           <span style="color: #008000;">&#125;</span>
         else
           ManagePosition<span style="color: #008000;">&#40;</span>asset_index,LONG<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s<span style="color: #000080;">==</span><span style="color: #008080;">&quot;S&quot;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VolatilityFilter<span style="color: #000080;">==</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span>
           <span style="color: #008000;">&#123;</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>stddev<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span>bbhi<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
              ManagePosition<span style="color: #008000;">&#40;</span>asset_index,SHORT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
           <span style="color: #008000;">&#125;</span>
         else
           ManagePosition<span style="color: #008000;">&#40;</span>asset_index,SHORT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
     <span style="color: #008000;">&#125;</span><span style="color: #808080;">//else if (GetPositionType(asset_index)==FLAT)</span>
   else<span style="color: #808080;">//position is not flat</span>
     <span style="color: #008000;">&#123;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>GetPositionType<span style="color: #008000;">&#40;</span>asset_index<span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span>LONG<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VolatilityFilter<span style="color: #000080;">==</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span>
           <span style="color: #008000;">&#123;</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s<span style="color: #000080;">==</span><span style="color: #008080;">&quot;S&quot;</span><span style="color: #000040;">||</span>stddev<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #000080;">&lt;</span>bbhi<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
              ManagePosition<span style="color: #008000;">&#40;</span>asset_index,FLAT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
           <span style="color: #008000;">&#125;</span>           
         else
           <span style="color: #008000;">&#123;</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s<span style="color: #000080;">==</span><span style="color: #008080;">&quot;S&quot;</span><span style="color: #008000;">&#41;</span>
              ManagePosition<span style="color: #008000;">&#40;</span>asset_index,FLAT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>           
           <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>GetPositionType<span style="color: #008000;">&#40;</span>asset_index<span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span>SHORT<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VolatilityFilter<span style="color: #000080;">==</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span>
           <span style="color: #008000;">&#123;</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s<span style="color: #000080;">==</span><span style="color: #008080;">&quot;L&quot;</span><span style="color: #000040;">||</span>stddev<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #000080;">&lt;</span>bbhi<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
              ManagePosition<span style="color: #008000;">&#40;</span>asset_index,FLAT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
           <span style="color: #008000;">&#125;</span>
         else
           <span style="color: #008000;">&#123;</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s<span style="color: #000080;">==</span><span style="color: #008080;">&quot;L&quot;</span><span style="color: #008000;">&#41;</span>
              ManagePosition<span style="color: #008000;">&#40;</span>asset_index,FLAT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>           
           <span style="color: #008000;">&#125;</span>        
        <span style="color: #008000;">&#125;</span>
     <span style="color: #008000;">&#125;</span>           
   <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Aceasta este TradeLogics(). Mai intai verifica daca VolatilityFilter e activat, si numai in acest caz apeleaza indicatorul BBoverSTD, pentru a face economie de timp in situatia in care filtrul este dezactivat. Apoi testeaza daca avem pozitie inchisa. Daca da, cumpara sau vinde dupa semnalul MASignal(), eventual filtrat de valorile BBoverSTD, daca VolatilityFilter e activat. Daca avem pozitie lunga sau scurta deja, verifica aparitia unui semnal contrar (desigur, cu aceeasi filtrare). Daca un semnal contrar vine, pozitia este inchisa, altfel nu are loc nicio adaptare a pozitiei la noul capital (desi ManagePosition() o poate face, nu i se cere).</p>

<div class="wp_codebox"><table width="100%" ><tr id="p163734"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code" id="p1637code34"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//| Expert initialization function                                   |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #0000ff;">int</span> OnInit<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">string</span> crtsymbol<span style="color: #008080;">;</span>
   SymbolsTable<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;EURUSD&quot;</span><span style="color: #008080;">;</span>
   SymbolsTable<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;USDJPY&quot;</span><span style="color: #008080;">;</span>
   SymbolsTable<span style="color: #008000;">&#91;</span>2<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;GBPUSD&quot;</span><span style="color: #008080;">;</span>
   SymbolsTable<span style="color: #008000;">&#91;</span>3<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;USDCHF&quot;</span><span style="color: #008080;">;</span>
   SymbolsCount<span style="color: #000080;">=</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>
   MakeIndicatorHandlers<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Acesta este OnInit(). Este deja setat sa lucreze cu 4 perechi valutare. Daca SymbolsCount ramane 1, numai EURUSD va fi tranzactionat. Daca il setezi la 4, toate cele patru perechi vor fi tranzactionate. Poti modifica SymbolsTable[] dupa dorinta (probleme pot aparea totusi la tranzactionarea CFD-urilor datorita metodei de calcul a lotului). OnInit() trebuie sa se incheie cu un apel la MakeIndicatorHandlers() pentru a face indicatorii gata de utilizare.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p163735"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code" id="p1637code35"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//| Expert tick function                                             |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #0000ff;">void</span> OnTick<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">datetime</span> datetime_array<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>SymbolsCount<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>
       <span style="color: #8a2be2;">CopyTime</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #8a2be2;">Period</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,0,1,datetime_array<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>datetime_array<span style="color: #008000;">&#91;</span><span style="color: #008000;">0</span><span style="color: #008000;">&#93;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">LastBarTime</span><span style="color: #008000;">&#41;</span>
         <span style="color: #008000;">&#123;</span>
          <span style="color: #808080;">//Print(SymbolsTable[i].Symbol,&quot; :: &quot;,TimeToString(SymbolsTable[i].LastBarTime,TIME_DATE),&quot; &quot;,TimeToString(SymbolsTable[i].LastBarTime,TIME_MINUTES),&quot;  vs. &quot;,TimeToString(datetime_array[0],TIME_DATE),&quot; &quot;,TimeToString(datetime_array[0],TIME_SECONDS) );</span>
          TradeLogics<span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
          SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">LastBarTime</span><span style="color: #000080;">=</span>datetime_array<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>          
         <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (datetime_array[0]!=LastBarOccurred[i])</span>
      <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (int i=0;i&lt;SymbolsCount;i++)</span>
   <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Acesta este OnTick(). OnTick() contine ciclul de simboluri, si solicita timpul ultimei bare de pe timeframe-ul curent la simbolul curent dat de ciclu. Daca acest timp este diferit decat cel retinut, inseamna ca o noua bara a aparut pe acel chart. Apoi este apelat TradeLogics() pentru decizie si apel la ManagePosition().</p>

<div class="wp_codebox"><table width="100%" ><tr id="p163736"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code" id="p1637code36"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//| Expert deinitialization function                                 |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #0000ff;">void</span> OnDeinit<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> reason<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>SymbolsCount<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>   
       <span style="color: #8a2be2;">IndicatorRelease</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">SlowMovingAverageHandler</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       <span style="color: #8a2be2;">IndicatorRelease</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">FastMovingAverageHandler</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       <span style="color: #8a2be2;">IndicatorRelease</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">BBoverSTDHandler</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #008000;">&#125;</span>
   <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Acesta este OnDeinit(). Elibereaza handlerele indicatorilor. Daca OnInit() ar rula din nou, ar face alte handlere. Nu este complet necesar sa facem asta, dar risipirea memoriei cu handlere noi de fiecare data cand ruleaza OnInit() nu se poate numi programare curata.</p>
<p>Urmatoarele backtesturi au fost realizate fara StopLoss si TakeProfit, de asemenea si cu VolatilityFilter dezactivat.</p>
<p><a href="http://mqlmagazine.com/ro/programarea-in-mql/mql5-un-expert-demonstrativ-de-portofoliu-folosind-medii-mobile/attachment/portfolioma-runs/" rel="attachment wp-att-1609"><img src="http://mqlmagazine.com/ro/wp-content/uploads/2010/05/PortfolioMA-runs.jpg" alt="" title="PortfolioMA runs" width="945" height="660" class="alignnone size-full wp-image-1609" /></a></p>
<p>Dupa cum se poate vedea, portofolizarea nu a fost o alegere buna. A adaugat instabilitate aditionala si caderi mai adanci. Totusi, acum avem de-a face cu sisteme de trading, in vreme ce <em>teoria managementului portfofoliului presupune in general o strategie de tip &#8220;long or out&#8221;.</em> De aceea, in teoria financiara, corelatiile negative scad riscurile, deoarece plusurile la unele active se compenseaza cu minusuri la altele. Dar, ceea ce avem acum e un <strong>portofoliu de sisteme de trading</strong>. Ne putem gandi la un sistem de trading ca o functie de equity a instrumentelor:
<pre>equity = sistem de trading(instrument)</pre>
<p> Pe doua active corelate perfect negativ, functia sistem de trading va intoarce doua serii de equity corelate perfect pozitiv. O aplicare riguroasa ar cere ca o selectie Markowitz sau CAPM asupra sistemelor de trading sa fie facuta pe outputuri de sisteme de trading in loc sa fie facuta pe datele de piata.</p>
<p>Vezi de asemenea si articolul despre<a href="http://mqlmagazine.com/ro/programarea-in-mql/virtualizarea-sistemelor-de-trading-pentru-ajustarea-liniei-de-equity-un-mit" target="_top">virtualizarea sistemelor de trading</a>, care priveste problema dintr-un alt punct de vedere.</p>
<p>Link:<br />
<a title="PortfolioMA.mq5" href="http://mqlmagazine.com/wp-content/uploads/editions/may2010/PortfolioMA.mq5" target="_top">PortfolioMA.mq5</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mqlmagazine.com/ro/programarea-in-mql/mql5-un-expert-demonstrativ-de-portofoliu-folosind-medii-mobile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Virtualizarea sistemelor de trading pentru ajustarea liniei de equity &#8211; un mit ?</title>
		<link>http://mqlmagazine.com/ro/programarea-in-mql/virtualizarea-sistemelor-de-trading-pentru-ajustarea-liniei-de-equity-un-mit/</link>
		<comments>http://mqlmagazine.com/ro/programarea-in-mql/virtualizarea-sistemelor-de-trading-pentru-ajustarea-liniei-de-equity-un-mit/#comments</comments>
		<pubDate>Mon, 24 May 2010 21:36:47 +0000</pubDate>
		<dc:creator>Bogdan Caramalac, MQLmagazine sr.editor</dc:creator>
				<category><![CDATA[Programarea in MQL]]></category>

		<guid isPermaLink="false">http://mqlmagazine.com/ro/?p=1653</guid>
		<description><![CDATA[[English version] [MQLmagazine.com in english] [Editia romaneasca]
Te-ai gandit vreodata cum ar fi sa ai o medie mobila pe linia de equity a unui sistem de trading, ca sa-l poti porni si opri ? Asta s-ar numi ajustarea liniei de equity.
Aspectul frustrant este acela ca odata ce incepi sa faci asta din sistemul de trading la [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mqlmagazine.com/mql-programming/trading-systems-virtualization-to-achieve-equity-line-fitting-a-myth" target="_top">[English version]</a> <a title="[MQLmagazine.com in english]" href="http://mqlmagazine.com" target="_top">[MQLmagazine.com in english]</a> <a title="[Editia romaneasca]" href="http://mqlmagazine.com/ro" target="_top">[Editia romaneasca]</a></p>
<p>Te-ai gandit vreodata cum ar fi sa ai o medie mobila pe linia de equity a unui sistem de trading, ca sa-l poti porni si opri ? Asta s-ar numi <strong>ajustarea liniei de equity</strong>.</p>
<p>Aspectul frustrant este acela ca odata ce incepi sa faci asta din sistemul de trading la care vrei sa ajustezi linia de equity, nu mai poti controla procesul, pentru ca indicatorii liniei de equity vor raporta diferit de fiecare data cand apesi pe buton.</p>
<p>Deci, ceea ce ai de facut e este sa lasi sistemul pe demo cumva in paralel cu sistemul de trading principal, sa copiezi tranzactiile in contul principal cand switchul e activat si sa le ignori cand switchul e dezactivat.</p>
<p>Aceasta se poate realiza prin <strong>virtualizare</strong>. Adica, trebuie sa scrii un sistem de management al pozitiilor , demo, ca un <strong>cont virtual</strong>, a carui iesire este &#8220;equity&#8221; catre sistemul de trading principal, care va optimiza aceasta curba si va decide daca va replica sau nu tranzactiile sistemului demo.</p>
<p>Astfel, incepem sa scriem un astfel de sistem, pe care-l vom numi <strong>TradeVirtualization.mqh</strong> .</p>

<div class="wp_codebox"><table width="100%" ><tr id="p165350"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
</pre></td><td class="code" id="p1653code50"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//|                                          TradeVirtualization.mqh |</span>
<span style="color: #808080;">//|                                       Copyright Bogdan Caramalac |</span>
<span style="color: #808080;">//|                                           http://mqlmagazine.com |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #339900;">#property copyright &quot;Copyright Bogdan Caramalac&quot;</span>
<span style="color: #339900;">#property link      &quot;http://mqlmagazine.com&quot;</span>
<span style="color: #339900;">#property version &quot;1.0&quot;</span>
&nbsp;
<span style="color: #339900;">#define FLAT        0</span>
<span style="color: #339900;">#define LONG        1</span>
<span style="color: #339900;">#define SHORT       2</span>
&nbsp;
<span style="color: #0000ff;">struct</span> VirtualSymbolData
  <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">string</span> <span style="color: #8a2be2;">Symbol</span><span style="color: #008080;">;</span>    
    <span style="color: #0000ff;">double</span> position<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">double</span> price<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">double</span> sl<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">double</span> tp<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">double</span> marked_price<span style="color: #008080;">;</span>    
  <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> VirtualEquityData
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">datetime</span> opentime,closetime<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">double</span> open,high,low,close<span style="color: #008080;">;</span>  
  <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Incepem cu definitiile obisnuite pentru managementul pozitiilor, urmate de doua structuri. Prima este proiectata pentru stocarea datelor refritoare la simboluri, oferind simbolul, pozitia (pozitiva &#8211; lunga, negativa &#8211; scurta), pretul (pretul la initializarea pozitiei), pretul marcat (ultimul pret la care pozitia a fost marcata la piata). A doua este proiectata pentru a stoca datele de equity virtuale : timpii de deschidere si inchidere pentru bara de equity; deschidere, maxim, minim, inchidere pentru fiecare equity din interval. Acum e timpul pentru clasa VirtualAccount.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p165351"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
</pre></td><td class="code" id="p1653code51"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">class</span> VirtualAccount
  <span style="color: #008000;">&#123;</span>   
   <span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
   <span style="color: #0000ff;">int</span> VirtualSymbolsCount<span style="color: #008080;">;</span>    
   VirtualSymbolData VirtualSymbolsTable<span style="color: #008000;">&#91;</span>30<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> 
   VirtualEquityData VirtualEquity<span style="color: #008000;">&#91;</span>500<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">double</span> VirtualLastAccountEquity<span style="color: #008080;">;</span>  
   <span style="color: #0000ff;">int</span> VirtualLastEquityPos<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">uint</span> VirtualEquityBarSpan<span style="color: #008080;">;</span>
&nbsp;
   <span style="color: #0000ff;">void</span> VirtualAccountSet<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span> Equity,<span style="color: #0000ff;">uint</span> TimeSpan<span style="color: #008000;">&#41;</span>   
       <span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">datetime</span> tc<span style="color: #000080;">=</span><span style="color: #8a2be2;">TimeCurrent</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        VirtualEquity<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">opentime</span><span style="color: #000080;">=</span>tc<span style="color: #008080;">;</span>
        VirtualEquity<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">open</span><span style="color: #000080;">=</span>Equity<span style="color: #008080;">;</span>
        VirtualEquity<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">high</span><span style="color: #000080;">=</span>Equity<span style="color: #008080;">;</span>
        VirtualEquity<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">low</span><span style="color: #000080;">=</span>Equity<span style="color: #008080;">;</span>
        VirtualEquity<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">close</span><span style="color: #000080;">=</span>Equity<span style="color: #008080;">;</span>
        VirtualEquity<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">closetime</span><span style="color: #000080;">=</span>tc<span style="color: #008080;">;</span>
        VirtualLastAccountEquity<span style="color: #000080;">=</span>VirtualEquity<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">close</span><span style="color: #008080;">;</span>
        VirtualEquityBarSpan<span style="color: #000080;">=</span>TimeSpan<span style="color: #008080;">;</span>
        VirtualLastEquityPos<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
       <span style="color: #008000;">&#125;</span>  
&nbsp;
    <span style="color: #0000ff;">int</span> VirtualGetPositionType<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> asset_index<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> 
    <span style="color: #0000ff;">double</span> VirtualGetPositionSize<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> asset_index<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">void</span> VirtualPositionSetSL<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span> asset_index,<span style="color: #0000ff;">double</span> sl<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">void</span> VirtualPositionSetTP<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span> asset_index,<span style="color: #0000ff;">double</span> tp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">void</span> VirtualMarkToMarket<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> asset_index<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">void</span> VirtualChangePosition<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> asset_index,<span style="color: #0000ff;">int</span> direction,<span style="color: #0000ff;">double</span> price,<span style="color: #0000ff;">double</span> lotsize<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">private</span><span style="color: #008080;">:</span>
    <span style="color: #0000ff;">void</span> VirtualAddNewEquity<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span> equity<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
    <span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
    VirtualAccount<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> 
       <span style="color: #008000;">&#123;</span>
        VirtualAccountSet<span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">AccountInfoDouble</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">ACCOUNT_EQUITY</span><span style="color: #008000;">&#41;</span>,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>      
  <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Clasa contine un tablou de VirtualSymbolsData si numarul sau de elemente, si un tablou cu VirtualEquityData. Alti parametri cheie sunt VirtualLastEquityPos si VirtualEquityBarSpan (timpul pe care se intinde o bara, in secunde). VirtualLastAccountEquity este doar un proxy pentru ultima valoare inregistrata a equity.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p165352"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
</pre></td><td class="code" id="p1653code52"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">int</span> VirtualAccount<span style="color: #008080;">::</span><span style="color: #007788;">VirtualGetPositionType</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> asset_index<span style="color: #008000;">&#41;</span>     
   <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span>,<span style="color: #008000;">2</span><span style="color: #008000;">&#41;</span>,<span style="color: #008000;">2</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #008080;">&quot;0.00&quot;</span><span style="color: #008000;">&#41;</span>
      <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>FLAT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">&gt;</span>0.00<span style="color: #008000;">&#41;</span>
      <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>LONG<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">&lt;</span>0.00<span style="color: #008000;">&#41;</span>
      <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>SHORT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> 
    <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>       
   <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">double</span> VirtualAccount<span style="color: #008080;">::</span><span style="color: #007788;">VirtualGetPositionSize</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> asset_index<span style="color: #008000;">&#41;</span>     
   <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span>,<span style="color: #008000;">2</span><span style="color: #008000;">&#41;</span>,<span style="color: #008000;">2</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #008080;">&quot;0.00&quot;</span><span style="color: #008000;">&#41;</span>
      <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>0.00<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">MathAbs</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #008000;">&#41;</span>,2<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>       
   <span style="color: #008000;">&#125;</span>       
&nbsp;
 <span style="color: #0000ff;">void</span> VirtualAccount<span style="color: #008080;">::</span><span style="color: #007788;">VirtualPositionSetSL</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span> asset_index,<span style="color: #0000ff;">double</span> sl<span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sl</span><span style="color: #000080;">=</span>sl<span style="color: #008080;">;</span>
     <span style="color: #008000;">&#125;</span>
&nbsp;
 <span style="color: #0000ff;">void</span> VirtualAccount<span style="color: #008080;">::</span><span style="color: #007788;">VirtualPositionSetTP</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span> asset_index,<span style="color: #0000ff;">double</span> tp<span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">tp</span><span style="color: #000080;">=</span>tp<span style="color: #008080;">;</span>
     <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>VirtualGetPositionType() si VirtualGetPositionSize() sunt pur informationale. Marimea pozitiei e intotdeauna pozitiva, tot asa cum PositionInfoDouble() intoarce valorile pentru cererile POSITION_VOLUME. Celelalte doua functii fac exact ce spune numele lor ca face &#8211; seteaza stop loss si take profit.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p165353"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
</pre></td><td class="code" id="p1653code53"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">void</span> VirtualAccount<span style="color: #008080;">::</span><span style="color: #007788;">VirtualAddNewEquity</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span> equity<span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
     <span style="color: #0000ff;">datetime</span> tc<span style="color: #000080;">=</span><span style="color: #8a2be2;">TimeCurrent</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
     <span style="color: #0000ff;">uint</span> diff<span style="color: #008080;">;</span>
     diff<span style="color: #000080;">=</span>tc<span style="color: #000040;">-</span>VirtualEquity<span style="color: #008000;">&#91;</span>VirtualLastEquityPos<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">opentime</span><span style="color: #008080;">;</span>
     <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>diff<span style="color: #000080;">&lt;=</span>VirtualEquityBarSpan<span style="color: #008000;">&#41;</span>
       <span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VirtualEquity<span style="color: #008000;">&#91;</span>VirtualLastEquityPos<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">high</span><span style="color: #000080;">&lt;</span>equity<span style="color: #008000;">&#41;</span>
          VirtualEquity<span style="color: #008000;">&#91;</span>VirtualLastEquityPos<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">high</span><span style="color: #000080;">=</span>equity<span style="color: #008080;">;</span>
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VirtualEquity<span style="color: #008000;">&#91;</span>VirtualLastEquityPos<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">low</span><span style="color: #000080;">&gt;</span>equity<span style="color: #008000;">&#41;</span>
          VirtualEquity<span style="color: #008000;">&#91;</span>VirtualLastEquityPos<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">low</span><span style="color: #000080;">=</span>equity<span style="color: #008080;">;</span>
        VirtualEquity<span style="color: #008000;">&#91;</span>VirtualLastEquityPos<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">close</span><span style="color: #000080;">=</span>equity<span style="color: #008080;">;</span>
        diff<span style="color: #000080;">=</span>tc<span style="color: #000040;">-</span>VirtualEquity<span style="color: #008000;">&#91;</span>VirtualLastEquityPos<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">closetime</span><span style="color: #008080;">;</span>           
        VirtualEquity<span style="color: #008000;">&#91;</span>VirtualLastEquityPos<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">closetime</span><span style="color: #000080;">=</span>tc<span style="color: #008080;">;</span>           
        VirtualLastAccountEquity<span style="color: #000080;">=</span>equity<span style="color: #008080;">;</span>
        <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
       <span style="color: #008000;">&#125;</span>
     <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VirtualLastEquityPos<span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">ArrayRange</span><span style="color: #008000;">&#40;</span>VirtualEquity,0<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span>1<span style="color: #008000;">&#41;</span>
       <span style="color: #008000;">&#123;</span>           
        VirtualLastEquityPos<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
        VirtualEquity<span style="color: #008000;">&#91;</span>VirtualLastEquityPos<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">opentime</span><span style="color: #000080;">=</span>tc<span style="color: #008080;">;</span>
        VirtualEquity<span style="color: #008000;">&#91;</span>VirtualLastEquityPos<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">open</span><span style="color: #000080;">=</span>equity<span style="color: #008080;">;</span>
        VirtualEquity<span style="color: #008000;">&#91;</span>VirtualLastEquityPos<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">high</span><span style="color: #000080;">=</span>equity<span style="color: #008080;">;</span>
        VirtualEquity<span style="color: #008000;">&#91;</span>VirtualLastEquityPos<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">low</span><span style="color: #000080;">=</span>equity<span style="color: #008080;">;</span>
        VirtualEquity<span style="color: #008000;">&#91;</span>VirtualLastEquityPos<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">close</span><span style="color: #000080;">=</span>equity<span style="color: #008080;">;</span>           
        VirtualEquity<span style="color: #008000;">&#91;</span>VirtualLastEquityPos<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">closetime</span><span style="color: #000080;">=</span>tc<span style="color: #008080;">;</span>
        VirtualLastAccountEquity<span style="color: #000080;">=</span>equity<span style="color: #008080;">;</span>
        <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
       <span style="color: #008000;">&#125;</span>
     else
       <span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span><span style="color: #8a2be2;">ArrayRange</span><span style="color: #008000;">&#40;</span>VirtualEquity,0<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
           VirtualEquity<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>VirtualEquity<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">+</span>1<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>                  
        VirtualEquity<span style="color: #008000;">&#91;</span>VirtualLastEquityPos<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">opentime</span><span style="color: #000080;">=</span>tc<span style="color: #008080;">;</span>
        VirtualEquity<span style="color: #008000;">&#91;</span>VirtualLastEquityPos<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">open</span><span style="color: #000080;">=</span>equity<span style="color: #008080;">;</span>
        VirtualEquity<span style="color: #008000;">&#91;</span>VirtualLastEquityPos<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">high</span><span style="color: #000080;">=</span>equity<span style="color: #008080;">;</span>
        VirtualEquity<span style="color: #008000;">&#91;</span>VirtualLastEquityPos<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">low</span><span style="color: #000080;">=</span>equity<span style="color: #008080;">;</span>
        VirtualEquity<span style="color: #008000;">&#91;</span>VirtualLastEquityPos<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">close</span><span style="color: #000080;">=</span>equity<span style="color: #008080;">;</span>           
        VirtualEquity<span style="color: #008000;">&#91;</span>VirtualLastEquityPos<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">closetime</span><span style="color: #000080;">=</span>tc<span style="color: #008080;">;</span>
        VirtualLastAccountEquity<span style="color: #000080;">=</span>equity<span style="color: #008080;">;</span>
        <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
       <span style="color: #008000;">&#125;</span>        
    <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>La inceput, clasa este setata automat cu un equity egal cu cel al contului pe care lucreaza si o largime a barei in timp de 0. Userul poate seta de la inceput contul sa aiba un equity de inceput diferit, si o alta largime in timp a barei. La fiecare tick, VirtualMarkToMarket(-1) trebuie sa fie apelat pentru a ne asigura ca toate pozitiile sunt marcate la piata cu preturile noi. Inregistrarile in VirtualEquity[] incep de la 0. Daca distanta in timp nu este 0, si noul tick soseste in intervalul de la deschiderea barei, noul tick este inregistrat pe acea bara, campul de close, cu stampilarea campului closetime. Maximul si minimul equity per bara sunt recalculate.<br />
At the beginning, the class is automatically set up with an equity equal to the real account equity and a timespan of 0. Daca intervalul e 0, sau daca noul equity soseste prea tarziu, se va inregistra pe bara urmatoare, pana la ultimul subscript (499). Cand trebuie sa intre pe 500, tabloul este impins spre stanga cu o pozitie si bara 499 incepe sa fie inregistrata de la inceput. VirtualAddNewEquity() este apelata numai din clasa. De aceea, a fost desemnata ca metoda private.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p165354"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
</pre></td><td class="code" id="p1653code54"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">void</span> VirtualAccount<span style="color: #008080;">::</span><span style="color: #007788;">VirtualMarkToMarket</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> asset_index<span style="color: #008000;">&#41;</span> <span style="color: #808080;">//marks a new equity value</span>
    <span style="color: #008000;">&#123;</span>
     <span style="color: #0000ff;">double</span> fluctuation<span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>
     <span style="color: #0000ff;">double</span> rprice,new_equity<span style="color: #008080;">;</span>
     <span style="color: #0000ff;">int</span> p<span style="color: #008080;">;</span>
     <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>asset_index<span style="color: #000080;">&lt;</span><span style="color: #008000;">0</span><span style="color: #008000;">&#41;</span><span style="color: #808080;">//mark all</span>
       <span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>VirtualSymbolsCount<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
           <span style="color: #008000;">&#123;</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span>,<span style="color: #008000;">2</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #008080;">&quot;0.00&quot;</span><span style="color: #008000;">&#41;</span>
              <span style="color: #0000ff;">continue</span><span style="color: #008080;">;</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span>,2<span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;</span>0.00<span style="color: #008000;">&#41;</span>
              rprice<span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_BID</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span>,2<span style="color: #008000;">&#41;</span><span style="color: #000080;">&lt;</span>0.00<span style="color: #008000;">&#41;</span>
              rprice<span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_ASK</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                
            fluctuation<span style="color: #000080;">=</span>fluctuation<span style="color: #000040;">+</span><span style="color: #8a2be2;">MathAbs</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_TRADE_CONTRACT_SIZE</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>rprice<span style="color: #000040;">-</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">marked_price</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>               
            VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">marked_price</span><span style="color: #000080;">=</span>rprice<span style="color: #008080;">;</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sl</span>,<span style="color: #008000;">5</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;0.00000&quot;</span><span style="color: #008000;">&#41;</span>
              <span style="color: #008000;">&#123;</span>
               <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">&gt;</span>0.00<span style="color: #000040;">&amp;&amp;</span>rprice<span style="color: #000080;">&lt;=</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sl</span><span style="color: #008000;">&#41;</span>
                 <span style="color: #008000;">&#123;</span>
                  VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>                     
                  VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">tp</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>
                  VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sl</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>
                 <span style="color: #008000;">&#125;</span>
               <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">&lt;</span>0.00<span style="color: #000040;">&amp;&amp;</span>rprice<span style="color: #000080;">&gt;=</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sl</span><span style="color: #008000;">&#41;</span>
                 <span style="color: #008000;">&#123;</span>
                  VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>                     
                  VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">tp</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>
                  VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sl</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>
                 <span style="color: #008000;">&#125;</span>                    
              <span style="color: #008000;">&#125;</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">tp</span>,<span style="color: #008000;">5</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;0.00000&quot;</span><span style="color: #008000;">&#41;</span>
              <span style="color: #008000;">&#123;</span>
               <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">&gt;</span>0.00<span style="color: #000040;">&amp;&amp;</span>rprice<span style="color: #000080;">&gt;=</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">tp</span><span style="color: #008000;">&#41;</span>
                 <span style="color: #008000;">&#123;</span>
                  VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>                     
                  VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">tp</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>
                  VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sl</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>
                 <span style="color: #008000;">&#125;</span>
               <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">&lt;</span>0.00<span style="color: #000040;">&amp;&amp;</span>rprice<span style="color: #000080;">&lt;=</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">tp</span><span style="color: #008000;">&#41;</span>
                 <span style="color: #008000;">&#123;</span>
                  VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>                     
                  VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">tp</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>
                  VirtualSymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sl</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>
                 <span style="color: #008000;">&#125;</span>                    
              <span style="color: #008000;">&#125;</span>                         
           <span style="color: #008000;">&#125;</span>
        new_equity<span style="color: #000080;">=</span>VirtualEquity<span style="color: #008000;">&#91;</span>VirtualLastEquityPos<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">close</span><span style="color: #000040;">+</span>fluctuation<span style="color: #008080;">;</span>
        VirtualAddNewEquity<span style="color: #008000;">&#40;</span>new_equity<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>  
       <span style="color: #008000;">&#125;</span>                      
     else
       <span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span>,<span style="color: #008000;">2</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;0.00&quot;</span><span style="color: #008000;">&#41;</span>
          <span style="color: #008000;">&#123;</span>
           <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span>,2<span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;</span>0.00<span style="color: #008000;">&#41;</span>
             <span style="color: #008000;">&#123;</span>
              p<span style="color: #000080;">=</span>LONG<span style="color: #008080;">;</span>
              rprice<span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_BID</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
             <span style="color: #008000;">&#125;</span>
           <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span>,2<span style="color: #008000;">&#41;</span><span style="color: #000080;">&lt;</span>0.00<span style="color: #008000;">&#41;</span>
             <span style="color: #008000;">&#123;</span>
              p<span style="color: #000080;">=</span>SHORT<span style="color: #008080;">;</span>
              rprice<span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_ASK</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                
             <span style="color: #008000;">&#125;</span>
           <span style="color: #808080;">//if (p==LONG)</span>
           <span style="color: #808080;">//  Print(&quot;Market marking @ &quot;,DoubleToString(rprice,SymbolInfoInteger(VirtualSymbolsTable[asset_index].Symbol,SYMBOL_DIGITS)),&quot; for &quot;,VirtualSymbolsTable[asset_index].Symbol,&quot; &quot;,DoubleToString(VirtualSymbolsTable[asset_index].position,2),&quot; LONG @ &quot;,DoubleToString(VirtualSymbolsTable[asset_index].price,SymbolInfoInteger(VirtualSymbolsTable[asset_index].Symbol,SYMBOL_DIGITS)),&quot;last mark @ &quot;,DoubleToString(VirtualSymbolsTable[asset_index].marked_price,SymbolInfoInteger(VirtualSymbolsTable[asset_index].Symbol,SYMBOL_DIGITS)),&quot; -&gt; &quot;,DoubleToString(new_equity,2),&quot; by fl. &quot;,DoubleToString(fluctuation,2));</span>
           <span style="color: #808080;">//if (p==SHORT)</span>
           <span style="color: #808080;">//  Print(&quot;Market marking @ &quot;,DoubleToString(rprice,SymbolInfoInteger(VirtualSymbolsTable[asset_index].Symbol,SYMBOL_DIGITS)),&quot; for &quot;,VirtualSymbolsTable[asset_index].Symbol,&quot; &quot;,DoubleToString(VirtualSymbolsTable[asset_index].position,2),&quot; SHORT @ &quot;,DoubleToString(VirtualSymbolsTable[asset_index].price,SymbolInfoInteger(VirtualSymbolsTable[asset_index].Symbol,SYMBOL_DIGITS)),&quot;last mark @ &quot;,DoubleToString(VirtualSymbolsTable[asset_index].marked_price,SymbolInfoInteger(VirtualSymbolsTable[asset_index].Symbol,SYMBOL_DIGITS)),&quot; -&gt; &quot;,DoubleToString(new_equity,2),&quot; by fl. &quot;,DoubleToString(fluctuation,2));                </span>
           fluctuation<span style="color: #000080;">=</span>fluctuation<span style="color: #000040;">+</span><span style="color: #8a2be2;">MathAbs</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_TRADE_CONTRACT_SIZE</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>rprice<span style="color: #000040;">-</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">marked_price</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>               
           VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">marked_price</span><span style="color: #000080;">=</span>rprice<span style="color: #008080;">;</span>
           <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sl</span>,<span style="color: #008000;">5</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;0.00000&quot;</span><span style="color: #008000;">&#41;</span>
             <span style="color: #008000;">&#123;</span>
              <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">&gt;</span>0.00<span style="color: #000040;">&amp;&amp;</span>rprice<span style="color: #000080;">&lt;=</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sl</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                 VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>                     
                 VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">tp</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>
                 VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sl</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>
                <span style="color: #008000;">&#125;</span>
              <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">&lt;</span>0.00<span style="color: #000040;">&amp;&amp;</span>rprice<span style="color: #000080;">&gt;=</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sl</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                 VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>                     
                 VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">tp</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>
                 VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sl</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>
                <span style="color: #008000;">&#125;</span>                    
             <span style="color: #008000;">&#125;</span>
           <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">tp</span>,<span style="color: #008000;">5</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;0.00000&quot;</span><span style="color: #008000;">&#41;</span>
             <span style="color: #008000;">&#123;</span>
              <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">&gt;</span>0.00<span style="color: #000040;">&amp;&amp;</span>rprice<span style="color: #000080;">&gt;=</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">tp</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                 VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>                     
                 VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">tp</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>
                 VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sl</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>
                <span style="color: #008000;">&#125;</span>
              <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">&lt;</span>0.00<span style="color: #000040;">&amp;&amp;</span>rprice<span style="color: #000080;">&lt;=</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">tp</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                 VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>                     
                 VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">tp</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>
                 VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sl</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00</span><span style="color: #008080;">;</span>
                <span style="color: #008000;">&#125;</span>                    
             <span style="color: #008000;">&#125;</span>                                       
          <span style="color: #008000;">&#125;</span>
        new_equity<span style="color: #000080;">=</span>VirtualEquity<span style="color: #008000;">&#91;</span>VirtualLastEquityPos<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">close</span><span style="color: #000040;">+</span>fluctuation<span style="color: #008080;">;</span>
        VirtualAddNewEquity<span style="color: #008000;">&#40;</span>new_equity<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>             
       <span style="color: #008000;">&#125;</span>
     <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>VirtualMarkToMarket() este inima intregii clase. Poate fi apelat pentru o pozitie sau pentru toate pozitiile. Marcheza pozitiile la piata, calculand equity. Pentru fiecare pozitie calculeaza fluctuatia in equity de la ultimul pret marcat pana la pretul curent, care devine pret marcat. Pentru aceeasi pozitie, procedura va sterge stop loss si take profit odata atinse. Userul trebuie doar sa apeleze VirtualMarkToMarket(-1) la fiecare tick pentru a marca la piata toate pozitiile.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p165355"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
</pre></td><td class="code" id="p1653code55"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">void</span> VirtualAccount<span style="color: #008080;">::</span><span style="color: #007788;">VirtualChangePosition</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> asset_index,<span style="color: #0000ff;">int</span> direction,<span style="color: #0000ff;">double</span> price,<span style="color: #0000ff;">double</span> lotsize<span style="color: #008000;">&#41;</span> <span style="color: #808080;">//direction is ORDER_TYPE_BUY or ORDER_TYPE_SELL</span>
    <span style="color: #008000;">&#123;</span>
     <span style="color: #0000ff;">int</span> p<span style="color: #000080;">=</span>VirtualGetPositionType<span style="color: #008000;">&#40;</span>asset_index<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
     <span style="color: #0000ff;">double</span> rprice,fluctuation,new_equity<span style="color: #008080;">;</span>
     <span style="color: #0000ff;">double</span> oldposition<span style="color: #008080;">;</span>            
     <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">==</span>FLAT<span style="color: #008000;">&#41;</span>
       <span style="color: #008000;">&#123;</span>
        VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">price</span><span style="color: #000080;">=</span>price<span style="color: #008080;">;</span>
        VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">marked_price</span><span style="color: #000080;">=</span>price<span style="color: #008080;">;</span>
        VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sl</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00000</span><span style="color: #008080;">;</span>
        VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">tp</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00000</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>direction<span style="color: #000080;">==</span><span style="color: #333399;">ORDER_TYPE_BUY</span><span style="color: #008000;">&#41;</span>             
          VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span>lotsize,2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>direction<span style="color: #000080;">==</span><span style="color: #333399;">ORDER_TYPE_SELL</span><span style="color: #008000;">&#41;</span>
          VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span>lotsize,2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #808080;">//Print(&quot;Position set to &quot;,VirtualSymbolsTable[asset_index].position,&quot; @ price &quot;,DoubleToString(VirtualSymbolsTable[asset_index].price,SymbolInfoInteger(VirtualSymbolsTable[asset_index].Symbol,SYMBOL_DIGITS) ) );</span>
       <span style="color: #008000;">&#125;</span>
     else
       <span style="color: #008000;">&#123;</span>
        oldposition<span style="color: #000080;">=</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #008080;">;</span>
        <span style="color: #808080;">//local mark to market</span>
        VirtualMarkToMarket<span style="color: #008000;">&#40;</span>asset_index<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>           
        <span style="color: #808080;">//position update</span>
        VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">price</span><span style="color: #000080;">=</span>price<span style="color: #008080;">;</span>           
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>direction<span style="color: #000080;">==</span><span style="color: #333399;">ORDER_TYPE_BUY</span><span style="color: #008000;">&#41;</span>
          <span style="color: #008000;">&#123;</span>
           VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000040;">+</span>lotsize,2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
           <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>oldposition<span style="color: #000080;">&lt;</span>0.00<span style="color: #000040;">&amp;&amp;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">&gt;</span><span style="color:#800080;">0.00</span><span style="color: #000040;">||</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span>,<span style="color: #008000;">5</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #008080;">&quot;0.00000&quot;</span><span style="color: #008000;">&#41;</span>
             <span style="color: #008000;">&#123;</span>
              VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sl</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00000</span><span style="color: #008080;">;</span>
              VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">tp</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00000</span><span style="color: #008080;">;</span>
             <span style="color: #008000;">&#125;</span>
          <span style="color: #008000;">&#125;</span>
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>direction<span style="color: #000080;">==</span><span style="color: #333399;">ORDER_TYPE_SELL</span><span style="color: #008000;">&#41;</span>
          <span style="color: #008000;">&#123;</span>
           VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000040;">-</span>lotsize,2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
           <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>oldposition<span style="color: #000080;">&gt;</span>0.00<span style="color: #000040;">&amp;&amp;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span><span style="color: #000080;">&lt;</span><span style="color:#800080;">0.00</span><span style="color: #000040;">||</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">position</span>,<span style="color: #008000;">5</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #008080;">&quot;0.00000&quot;</span><span style="color: #008000;">&#41;</span>
             <span style="color: #008000;">&#123;</span>
              VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">sl</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00000</span><span style="color: #008080;">;</span>
              VirtualSymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">tp</span><span style="color: #000080;">=</span><span style="color:#800080;">0.00000</span><span style="color: #008080;">;</span>
             <span style="color: #008000;">&#125;</span>
          <span style="color: #008000;">&#125;</span>              
        <span style="color: #808080;">//Print(&quot;Position set to &quot;,VirtualSymbolsTable[asset_index].position,&quot; @ price &quot;,DoubleToString(VirtualSymbolsTable[asset_index].price,SymbolInfoInteger(VirtualSymbolsTable[asset_index].Symbol,SYMBOL_DIGITS) ) );</span>
       <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
   <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Pentru a face o tranzactie, trebuie sa folosesti VirtualChangePosition(), care va deschide o pozitie in directia data, cu pretul si marimea lotului specificata, pe activul specificat prin index. Aceasta deschidere este similara deschiderii unei &#8220;afaceri&#8221; (deal). De aceea, numai ORDER_TYPE_BUY si ORDER_TYPE_SELL sunt suportate. Nu exista ordine pending sau StopLimit. Functia doar seteaza sau modifica pozitii. De asemenea elimina stop loss-ul sau take profit daca pozitia isi inverseaza semnul.</p>
<p>Acum ca am realizat clasa, e timpul sa <strong>virtualizam</strong> expertul pe medii mobile din articolul<br />
<a href="http://mqlmagazine.com/ro/programarea-in-mql/mql5-un-expert-demonstrativ-de-portofoliu-folosind-medii-mobile/" target="_top">MQL5 : Un expert demonstrativ de portofoliu folosind medii mobile</a>, intr-un fisier nou, <strong>VirtualPortfolioMA.mq5</strong> .</p>

<div class="wp_codebox"><table width="100%" ><tr id="p165356"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
</pre></td><td class="code" id="p1653code56"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//|                                           VirtualPortfolioMA.mq5 |</span>
<span style="color: #808080;">//|                                       Copyright Bogdan Caramalac |</span>
<span style="color: #808080;">//|                                           http://mqlmagazine.com |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #339900;">#property copyright &quot;Copyright Bogdan Caramalac&quot;</span>
<span style="color: #339900;">#property link      &quot;http://mqlmagazine.com&quot;</span>
<span style="color: #339900;">#property version   &quot;1.00&quot;</span>
&nbsp;
<span style="color: #339900;">#define FLAT        0</span>
<span style="color: #339900;">#define LONG        1</span>
<span style="color: #339900;">#define SHORT       2</span>
&nbsp;
<span style="color: #0000ff;">input</span> <span style="color: #0000ff;">int</span> Slippage<span style="color: #000080;">=</span><span style="color: #008000;">30</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">input</span> <span style="color: #0000ff;">double</span> MarginUsagePerPosition<span style="color: #000080;">=</span><span style="color:#800080;">0.5</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">input</span> <span style="color: #0000ff;">bool</span> VolatilityFilter<span style="color: #000080;">=</span><span style="color: #333399;">false</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">input</span> <span style="color: #0000ff;">int</span> VirtualStopLoss<span style="color: #000080;">=</span><span style="color: #008000;">300</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">input</span> <span style="color: #0000ff;">int</span> VirtualTakeProfit<span style="color: #000080;">=</span><span style="color: #008000;">1000</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">input</span> <span style="color: #0000ff;">int</span> SlowMALength<span style="color: #000080;">=</span><span style="color: #008000;">14</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">input</span> <span style="color: #0000ff;">int</span> FastMALength<span style="color: #000080;">=</span><span style="color: #008000;">9</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">input</span> <span style="color: #0000ff;">int</span> EquitySlowMAPeriod<span style="color: #000080;">=</span><span style="color: #008000;">14</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">input</span> <span style="color: #0000ff;">int</span> EquityFastMAPeriod<span style="color: #000080;">=</span><span style="color: #008000;">9</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">input</span> <span style="color: #0000ff;">int</span> RealStopLoss<span style="color: #000080;">=</span><span style="color: #008000;">300</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">input</span> <span style="color: #0000ff;">int</span> RealTakeProfit<span style="color: #000080;">=</span><span style="color: #008000;">1000</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Variabilele sunt cam aceleasi, cu diferenta ca acum stop loss, take profit si noile perioade ale mediilor mobile se impart in doua : pentru contul virtual si contul pe care ruleaza sistemul efectiv.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p165357"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
</pre></td><td class="code" id="p1653code57"><pre class="mql5" style="font-family:monospace;"><span style="color: #339900;">#include &lt;TradeVirtualization.mqh&gt;</span>
<span style="color: #339900;">#include &lt;MovingAverages.mqh&gt;</span>
&nbsp;
<span style="color: #0000ff;">int</span> SymbolsCount<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> IndicatorHandlersStruct
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">int</span> SlowMovingAverageHandler<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> FastMovingAverageHandler<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> BBoverSTDHandler<span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> SymbolData
  <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">string</span> <span style="color: #8a2be2;">Symbol</span><span style="color: #008080;">;</span>
    IndicatorHandlersStruct IndicatorHandlers<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">datetime</span> LastBarTime<span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
SymbolData SymbolsTable<span style="color: #008000;">&#91;</span>30<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
VirtualAccount VirtualSystem<span style="color: #008080;">;</span>    
&nbsp;
<span style="color: #0000ff;">datetime</span> VirtualLastBarTime<span style="color: #008080;">;</span>
<span style="color: #0000ff;">string</span> RealTrading<span style="color: #000080;">=</span><span style="color: #008080;">&quot;FORBIDDEN&quot;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Structurile sunt destul de similare. Clasa este instantiata in obiectul VirtualSystem. Timpul de deschidere al ultimei bare de equity este inregistrat in VirtualLastBarTime. Variabila RealTrading retine modul in care tranzactiile se copiaza din contul virtual in cel efectiv, si anume &#8220;STRAIGHT&#8221; (direct), &#8220;REVERSED&#8221; (invers), &#8220;FORBIDDEN&#8221; (interzis) (numai &#8220;STRAIGHT&#8221; si &#8220;FORBIDDEN&#8221; sunt utilizate efectiv).</p>
<p>VirtualMakeIndicatorHanders() ia locul lui MakeIndicatorHandlers(). Codul este la fel, doar numele este schimbat.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p165358"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
</pre></td><td class="code" id="p1653code58"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">void</span> VirtualPositionSetSLTP<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> asset_index,<span style="color: #0000ff;">int</span> sl,<span style="color: #0000ff;">int</span> tp<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   VirtualSystem.<span style="color: #007788;">VirtualPositionSetSL</span><span style="color: #008000;">&#40;</span>asset_index,sl<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   VirtualSystem.<span style="color: #007788;">VirtualPositionSetSL</span><span style="color: #008000;">&#40;</span>asset_index,tp<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>  
&nbsp;
<span style="color: #0000ff;">void</span> VirtualManagePosition<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> asset_index,<span style="color: #0000ff;">int</span> operation<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   MqlTradeRequest request<span style="color: #008080;">;</span>
   MqlTradeResult result<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> p<span style="color: #008080;">;</span>
   p<span style="color: #000080;">=</span>VirtualSystem.<span style="color: #007788;">VirtualGetPositionType</span><span style="color: #008000;">&#40;</span>asset_index<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">double</span> now_volume<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">double</span> current_volume,v0<span style="color: #008080;">;</span>
   current_volume<span style="color: #000080;">=</span>VirtualSystem.<span style="color: #007788;">VirtualGetPositionSize</span><span style="color: #008000;">&#40;</span>asset_index<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   v0<span style="color: #000080;">=</span>current_volume<span style="color: #008080;">;</span>   
   request.<span style="color: #007788;">action</span><span style="color: #000080;">=</span><span style="color: #333399;">TRADE_ACTION_DEAL</span><span style="color: #008080;">;</span>
   request.<span style="color: #007788;">symbol</span><span style="color: #000080;">=</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span><span style="color: #008080;">;</span> 
   request.<span style="color: #007788;">deviation</span><span style="color: #000080;">=</span>Slippage<span style="color: #008080;">;</span>
   request.<span style="color: #007788;">type_filling</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_FILLING_AON</span><span style="color: #008080;">;</span>
   request.<span style="color: #007788;">type_time</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_TIME_GTC</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">==</span>FLAT<span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span>UnitsToLots<span style="color: #008000;">&#40;</span> <span style="color: #008000;">&#40;</span>MarginUsagePerPosition<span style="color: #000040;">/</span>100<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>VirtualSystem.<span style="color: #007788;">VirtualLastAccountEquity</span><span style="color: #000040;">*</span><span style="color: #8a2be2;">AccountInfoInteger</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">ACCOUNT_LEVERAGE</span><span style="color: #008000;">&#41;</span>,SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>operation<span style="color: #000080;">==</span>LONG<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
         request.<span style="color: #007788;">type</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_TYPE_BUY</span><span style="color: #008080;">;</span>
         request.<span style="color: #007788;">price</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_ASK</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>operation<span style="color: #000080;">==</span>SHORT<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
         request.<span style="color: #007788;">type</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_TYPE_SELL</span><span style="color: #008080;">;</span>
         request.<span style="color: #007788;">price</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_BID</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
     <span style="color: #008000;">&#125;</span>
   else<span style="color: #808080;">//if (p==FLAT)</span>
     <span style="color: #008000;">&#123;</span>      
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">==</span>LONG<span style="color: #000040;">&amp;&amp;</span>operation<span style="color: #000080;">==</span>SHORT<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
         request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span>current_volume<span style="color: #000040;">+</span>UnitsToLots<span style="color: #008000;">&#40;</span> <span style="color: #008000;">&#40;</span>MarginUsagePerPosition<span style="color: #000040;">/</span>100<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>VirtualSystem.<span style="color: #007788;">VirtualLastAccountEquity</span><span style="color: #000040;">*</span><span style="color: #8a2be2;">AccountInfoInteger</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">ACCOUNT_LEVERAGE</span><span style="color: #008000;">&#41;</span>,SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
         request.<span style="color: #007788;">type</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_TYPE_SELL</span><span style="color: #008080;">;</span>         
         request.<span style="color: #007788;">price</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_BID</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>         
        <span style="color: #008000;">&#125;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">==</span>SHORT<span style="color: #000040;">&amp;&amp;</span>operation<span style="color: #000080;">==</span>LONG<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
         request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span>current_volume<span style="color: #000040;">+</span>UnitsToLots<span style="color: #008000;">&#40;</span> <span style="color: #008000;">&#40;</span>MarginUsagePerPosition<span style="color: #000040;">/</span>100<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>VirtualSystem.<span style="color: #007788;">VirtualLastAccountEquity</span><span style="color: #000040;">*</span><span style="color: #8a2be2;">AccountInfoInteger</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">ACCOUNT_LEVERAGE</span><span style="color: #008000;">&#41;</span>,SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
         request.<span style="color: #007788;">type</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_TYPE_BUY</span><span style="color: #008080;">;</span>
         request.<span style="color: #007788;">price</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_ASK</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">==</span>LONG<span style="color: #000040;">&amp;&amp;</span>operation<span style="color: #000080;">==</span>FLAT<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
         request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span>current_volume<span style="color: #008080;">;</span>
         request.<span style="color: #007788;">type</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_TYPE_SELL</span><span style="color: #008080;">;</span>         
         request.<span style="color: #007788;">price</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_BID</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>         
        <span style="color: #008000;">&#125;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">==</span>SHORT<span style="color: #000040;">&amp;&amp;</span>operation<span style="color: #000080;">==</span>FLAT<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
         request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span>current_volume<span style="color: #008080;">;</span>
         request.<span style="color: #007788;">type</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_TYPE_BUY</span><span style="color: #008080;">;</span>         
         request.<span style="color: #007788;">price</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_ASK</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>         
        <span style="color: #008000;">&#125;</span> 
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">==</span>LONG<span style="color: #000040;">&amp;&amp;</span>operation<span style="color: #000080;">==</span>LONG<span style="color: #008000;">&#41;</span><span style="color: #808080;">//adjustment of the present LONG position</span>
        <span style="color: #008000;">&#123;</span>
         request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span>UnitsToLots<span style="color: #008000;">&#40;</span> <span style="color: #008000;">&#40;</span>MarginUsagePerPosition<span style="color: #000040;">/</span>100<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>VirtualSystem.<span style="color: #007788;">VirtualLastAccountEquity</span><span style="color: #000040;">*</span><span style="color: #8a2be2;">AccountInfoInteger</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">ACCOUNT_LEVERAGE</span><span style="color: #008000;">&#41;</span>,SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span> <span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span>current_volume<span style="color: #008080;">;</span>
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span>request.<span style="color: #007788;">volume</span>,2<span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;</span>0.00<span style="color: #008000;">&#41;</span>
           <span style="color: #008000;">&#123;</span>         
            request.<span style="color: #007788;">type</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_TYPE_BUY</span><span style="color: #008080;">;</span>
            request.<span style="color: #007788;">price</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_ASK</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
           <span style="color: #008000;">&#125;</span>
         else <span style="color: #808080;">//we close the difference</span>
           <span style="color: #008000;">&#123;</span>
            request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">MathAbs</span><span style="color: #008000;">&#40;</span>request.<span style="color: #007788;">volume</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            request.<span style="color: #007788;">type</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_TYPE_SELL</span><span style="color: #008080;">;</span>         
            request.<span style="color: #007788;">price</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_BID</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>         
           <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>        
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>p<span style="color: #000080;">==</span>SHORT<span style="color: #000040;">&amp;&amp;</span>operation<span style="color: #000080;">==</span>SHORT<span style="color: #008000;">&#41;</span><span style="color: #808080;">//adjustment of the present SHORT position</span>
        <span style="color: #008000;">&#123;</span>
         request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span>UnitsToLots<span style="color: #008000;">&#40;</span> <span style="color: #008000;">&#40;</span>MarginUsagePerPosition<span style="color: #000040;">/</span>100<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>VirtualSystem.<span style="color: #007788;">VirtualLastAccountEquity</span><span style="color: #000040;">*</span><span style="color: #8a2be2;">AccountInfoInteger</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">ACCOUNT_LEVERAGE</span><span style="color: #008000;">&#41;</span>,SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span> <span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span>current_volume<span style="color: #008080;">;</span>
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span>request.<span style="color: #007788;">volume</span>,2<span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;</span>0.00<span style="color: #008000;">&#41;</span>
           <span style="color: #008000;">&#123;</span>
            request.<span style="color: #007788;">type</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_TYPE_SELL</span><span style="color: #008080;">;</span>         
            request.<span style="color: #007788;">price</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_BID</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                  
           <span style="color: #008000;">&#125;</span>
         else
           <span style="color: #008000;">&#123;</span>
            request.<span style="color: #007788;">volume</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">MathAbs</span><span style="color: #008000;">&#40;</span>request.<span style="color: #007788;">volume</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            request.<span style="color: #007788;">type</span><span style="color: #000080;">=</span><span style="color: #333399;">ORDER_TYPE_BUY</span><span style="color: #008080;">;</span>
            request.<span style="color: #007788;">price</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_ASK</span><span style="color: #008000;">&#41;</span>,<span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>            
           <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>        
     <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (p==FLAT)</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>request.<span style="color: #007788;">volume</span><span style="color: #000080;">&gt;</span>0.00<span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>       
      VirtualSystem.<span style="color: #007788;">VirtualChangePosition</span><span style="color: #008000;">&#40;</span>asset_index,request.<span style="color: #007788;">type</span>,request.<span style="color: #007788;">price</span>,request.<span style="color: #007788;">volume</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      VirtualPositionSetSLTP<span style="color: #008000;">&#40;</span>asset_index,VirtualStopLoss,VirtualTakeProfit<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>      
     <span style="color: #008000;">&#125;</span>
   <span style="color: #808080;">//deciding to replicate , stay out or reverse signals on real portfolio</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>RealTrading<span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;FORBIDDEN&quot;</span><span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>RealTrading<span style="color: #000080;">==</span><span style="color: #008080;">&quot;STRAIGHT&quot;</span><span style="color: #008000;">&#41;</span>
        ManagePosition<span style="color: #008000;">&#40;</span>asset_index,operation<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      else
        <span style="color: #008000;">&#123;</span>
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>operation<span style="color: #000080;">==</span>LONG<span style="color: #008000;">&#41;</span>
           ManagePosition<span style="color: #008000;">&#40;</span>asset_index,SHORT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>operation<span style="color: #000080;">==</span>SHORT<span style="color: #008000;">&#41;</span>
           ManagePosition<span style="color: #008000;">&#40;</span>asset_index,LONG<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>operation<span style="color: #000080;">==</span>FLAT<span style="color: #008000;">&#41;</span>
           ManagePosition<span style="color: #008000;">&#40;</span>asset_index,FLAT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
     <span style="color: #008000;">&#125;</span>
   <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>     
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Aceasta este VirtualManagePosition. Opereaza ca ManagePosition() dar cererile ei sunt directionate catre contul virtual. La sfarsit, dupa ce analizeaza variabila RealTrading, decide sa nu faca nimic, sa replice identic sau inversat operatiunile din contul virtual in cel efectiv.</p>
<p>Functiile MASignal(), PositionSetSLTP() si ManagePosition() raman la fel ca in expertul original.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p165359"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
</pre></td><td class="code" id="p1653code59"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">void</span> VirtualTradeLogics<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> asset_index<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">string</span> s<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">double</span> stddev<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">double</span> bbhi<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">double</span> bblo<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> copycount<span style="color: #008080;">;</span>
   s<span style="color: #000080;">=</span>MASignal<span style="color: #008000;">&#40;</span>asset_index<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VolatilityFilter<span style="color: #000080;">==</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      copycount<span style="color: #000080;">=</span><span style="color: #8a2be2;">CopyBuffer</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">BBoverSTDHandler</span>,0,0,1,stddev<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      copycount<span style="color: #000080;">=</span><span style="color: #8a2be2;">CopyBuffer</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>asset_index<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">IndicatorHandlers</span>.<span style="color: #007788;">BBoverSTDHandler</span>,2,0,1,bbhi<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
     <span style="color: #008000;">&#125;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VirtualSystem.<span style="color: #007788;">VirtualGetPositionType</span><span style="color: #008000;">&#40;</span>asset_index<span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span>FLAT<span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>      
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s<span style="color: #000080;">==</span><span style="color: #008080;">&quot;L&quot;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VolatilityFilter<span style="color: #000080;">==</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span>
           <span style="color: #008000;">&#123;</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>stddev<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span>bbhi<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
              VirtualManagePosition<span style="color: #008000;">&#40;</span>asset_index,LONG<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
           <span style="color: #008000;">&#125;</span>
         else
           VirtualManagePosition<span style="color: #008000;">&#40;</span>asset_index,LONG<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s<span style="color: #000080;">==</span><span style="color: #008080;">&quot;S&quot;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VolatilityFilter<span style="color: #000080;">==</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span>
           <span style="color: #008000;">&#123;</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>stddev<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span>bbhi<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
              VirtualManagePosition<span style="color: #008000;">&#40;</span>asset_index,SHORT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
           <span style="color: #008000;">&#125;</span>
         else
           VirtualManagePosition<span style="color: #008000;">&#40;</span>asset_index,SHORT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
     <span style="color: #008000;">&#125;</span><span style="color: #808080;">//else if (GetPositionType(asset_index)==FLAT)</span>
   else<span style="color: #808080;">//position is not flat</span>
     <span style="color: #008000;">&#123;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VirtualSystem.<span style="color: #007788;">VirtualGetPositionType</span><span style="color: #008000;">&#40;</span>asset_index<span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span>LONG<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>        
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VolatilityFilter<span style="color: #000080;">==</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span>
           <span style="color: #008000;">&#123;</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s<span style="color: #000080;">==</span><span style="color: #008080;">&quot;S&quot;</span><span style="color: #000040;">||</span>stddev<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #000080;">&lt;</span>bbhi<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
              VirtualManagePosition<span style="color: #008000;">&#40;</span>asset_index,FLAT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
           <span style="color: #008000;">&#125;</span>           
         else
           <span style="color: #008000;">&#123;</span>            
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s<span style="color: #000080;">==</span><span style="color: #008080;">&quot;S&quot;</span><span style="color: #008000;">&#41;</span>
              <span style="color: #008000;">&#123;</span>               
               VirtualManagePosition<span style="color: #008000;">&#40;</span>asset_index,FLAT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>           
              <span style="color: #008000;">&#125;</span>
           <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (VolatilityFilter==true)</span>
        <span style="color: #008000;">&#125;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VirtualSystem.<span style="color: #007788;">VirtualGetPositionType</span><span style="color: #008000;">&#40;</span>asset_index<span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span>SHORT<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>         
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VolatilityFilter<span style="color: #000080;">==</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span>
           <span style="color: #008000;">&#123;</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s<span style="color: #000080;">==</span><span style="color: #008080;">&quot;L&quot;</span><span style="color: #000040;">||</span>stddev<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #000080;">&lt;</span>bbhi<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
              VirtualManagePosition<span style="color: #008000;">&#40;</span>asset_index,FLAT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
           <span style="color: #008000;">&#125;</span>
         else
           <span style="color: #008000;">&#123;</span>            
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s<span style="color: #000080;">==</span><span style="color: #008080;">&quot;L&quot;</span><span style="color: #008000;">&#41;</span>
              <span style="color: #008000;">&#123;</span>               
               VirtualManagePosition<span style="color: #008000;">&#40;</span>asset_index,FLAT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>           
              <span style="color: #008000;">&#125;</span>
           <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (VolatilityFilter==true)        </span>
        <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (VirtualSystem.VirtualGetPositionType(asset_index)==SHORT)</span>
     <span style="color: #008000;">&#125;</span>           
   <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Acesta este fostul TradeLogics(), dar modificat pentru a opera in contul virtual.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p165360"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
</pre></td><td class="code" id="p1653code60"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">int</span> PeriodToMinutes<span style="color: #008000;">&#40;</span><span style="color: #333399;">ENUM_TIMEFRAMES</span> p<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">switch</span><span style="color: #008000;">&#40;</span>p<span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      <span style="color: #0000ff;">case</span> <span style="color: #333399;">PERIOD_M1</span><span style="color: #008080;">:</span><span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">case</span> <span style="color: #333399;">PERIOD_M2</span><span style="color: #008080;">:</span><span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">case</span> <span style="color: #333399;">PERIOD_M3</span><span style="color: #008080;">:</span><span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>3<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">case</span> <span style="color: #333399;">PERIOD_M4</span><span style="color: #008080;">:</span><span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>4<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">case</span> <span style="color: #333399;">PERIOD_M5</span><span style="color: #008080;">:</span><span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>5<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">case</span> <span style="color: #333399;">PERIOD_M6</span><span style="color: #008080;">:</span><span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>6<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">case</span> <span style="color: #333399;">PERIOD_M10</span><span style="color: #008080;">:</span><span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>10<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">case</span> <span style="color: #333399;">PERIOD_M12</span><span style="color: #008080;">:</span><span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>12<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">case</span> <span style="color: #333399;">PERIOD_M15</span><span style="color: #008080;">:</span><span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>15<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">case</span> <span style="color: #333399;">PERIOD_M20</span><span style="color: #008080;">:</span><span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>20<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">case</span> <span style="color: #333399;">PERIOD_M30</span><span style="color: #008080;">:</span><span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>30<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">case</span> <span style="color: #333399;">PERIOD_H1</span><span style="color: #008080;">:</span><span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>60<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">case</span> <span style="color: #333399;">PERIOD_H2</span><span style="color: #008080;">:</span><span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>60<span style="color: #000040;">*</span>2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">case</span> <span style="color: #333399;">PERIOD_H3</span><span style="color: #008080;">:</span><span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>60<span style="color: #000040;">*</span>3<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">case</span> <span style="color: #333399;">PERIOD_H4</span><span style="color: #008080;">:</span><span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>60<span style="color: #000040;">*</span>4<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">case</span> <span style="color: #333399;">PERIOD_H6</span><span style="color: #008080;">:</span><span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>60<span style="color: #000040;">*</span>6<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">case</span> <span style="color: #333399;">PERIOD_H8</span><span style="color: #008080;">:</span><span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>60<span style="color: #000040;">*</span>8<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">case</span> <span style="color: #333399;">PERIOD_H12</span><span style="color: #008080;">:</span><span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>60<span style="color: #000040;">*</span>12<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">case</span> <span style="color: #333399;">PERIOD_D1</span><span style="color: #008080;">:</span><span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>60<span style="color: #000040;">*</span>24<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">case</span> <span style="color: #333399;">PERIOD_W1</span><span style="color: #008080;">:</span><span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>60<span style="color: #000040;">*</span>24<span style="color: #000040;">*</span>7<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">case</span> <span style="color: #333399;">PERIOD_MN1</span><span style="color: #008080;">:</span><span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>60<span style="color: #000040;">*</span>24<span style="color: #000040;">*</span>30<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      default<span style="color: #008080;">:</span> <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
     <span style="color: #008000;">&#125;</span>
  <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Aceasta<br />
This function is used in OnInit pentru a seta distanta in timp a barelor contului virtual &#8211; ea converteste perioadele in minute.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p165361"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="code" id="p1653code61"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//| Expert initialization function                                   |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #0000ff;">int</span> OnInit<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   SymbolsTable<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;EURUSD&quot;</span><span style="color: #008080;">;</span>
   SymbolsTable<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;USDJPY&quot;</span><span style="color: #008080;">;</span>
   SymbolsTable<span style="color: #008000;">&#91;</span>2<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;GBPUSD&quot;</span><span style="color: #008080;">;</span>
   SymbolsTable<span style="color: #008000;">&#91;</span>3<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;USDCHF&quot;</span><span style="color: #008080;">;</span>
   SymbolsCount<span style="color: #000080;">=</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>
&nbsp;
   VirtualSystem.<span style="color: #007788;">VirtualAccountSet</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">AccountInfoDouble</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">ACCOUNT_EQUITY</span><span style="color: #008000;">&#41;</span>,PeriodToMinutes<span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">Period</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>60<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>  
   VirtualSystem.<span style="color: #007788;">VirtualSymbolsCount</span><span style="color: #000080;">=</span>SymbolsCount<span style="color: #008080;">;</span>      
   <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>SymbolsCount<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
      VirtualSystem.<span style="color: #007788;">VirtualSymbolsTable</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span><span style="color: #000080;">=</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span><span style="color: #008080;">;</span>
   VirtualMakeIndicatorHandlers<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   VirtualLastBarTime<span style="color: #000080;">=</span>VirtualSystem.<span style="color: #007788;">VirtualEquity</span><span style="color: #008000;">&#91;</span>VirtualSystem.<span style="color: #007788;">VirtualLastEquityPos</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">opentime</span><span style="color: #008080;">;</span>
   RealTrading<span style="color: #000080;">=</span><span style="color: #008080;">&quot;FORBIDDEN&quot;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Acesta este OnInit(). Pregateste simbolurile la fel ca fostul OnInit() apoi copiaza simbolurile in contul virtual. Seteaza contul virtual si se asigura ca RealTrading e setat ca &#8220;FORBIDDEN&#8221;.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p165362"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
</pre></td><td class="code" id="p1653code62"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//| Expert tick function                                             |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #0000ff;">void</span> OnTick<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>   
   <span style="color: #0000ff;">double</span> loweq<span style="color: #008080;">;</span>         
   <span style="color: #0000ff;">double</span> fast_ma_now,slow_ma_now,fast_ma_old,slow_ma_old<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">double</span> EquityCloseBuffer<span style="color: #008000;">&#91;</span>31<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">datetime</span> datetime_array<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>   
   <span style="color: #808080;">//marking to market virtual positions</span>
   VirtualSystem.<span style="color: #007788;">VirtualMarkToMarket</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span>1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #808080;">//looping symbols to apply logics</span>
   <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>SymbolsCount<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>
       <span style="color: #8a2be2;">CopyTime</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #8a2be2;">Period</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,0,1,datetime_array<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>datetime_array<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">LastBarTime</span><span style="color: #008000;">&#41;</span>
         <span style="color: #008000;">&#123;</span>                  
          VirtualTradeLogics<span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
          SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">LastBarTime</span><span style="color: #000080;">=</span>datetime_array<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
         <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (datetime_array[0]!=LastBarOccurred[i])</span>
      <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (int i=0;i&lt;SymbolsCount;i++)   </span>
&nbsp;
   <span style="color: #808080;">//now we check if we have enough equity bars ; if true, we analyse to see whether we activate or not live trading</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VirtualSystem.<span style="color: #007788;">VirtualEquity</span><span style="color: #008000;">&#91;</span>VirtualSystem.<span style="color: #007788;">VirtualLastEquityPos</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">opentime</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>VirtualLastBarTime<span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>VirtualSystem.<span style="color: #007788;">VirtualLastEquityPos</span><span style="color: #000080;">&gt;</span><span style="color: #8a2be2;">ArrayRange</span><span style="color: #008000;">&#40;</span>EquityCloseBuffer,0<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>  
        <span style="color: #008000;">&#123;</span>
         <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span><span style="color: #8a2be2;">ArrayRange</span><span style="color: #008000;">&#40;</span>EquityCloseBuffer,0<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>         
             EquityCloseBuffer<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #8a2be2;">StringToDouble</span><span style="color: #008000;">&#40;</span> <span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>VirtualSystem.<span style="color: #007788;">VirtualEquity</span><span style="color: #008000;">&#91;</span>VirtualSystem.<span style="color: #007788;">VirtualLastEquityPos</span><span style="color: #000040;">-</span><span style="color: #8a2be2;">ArrayRange</span><span style="color: #008000;">&#40;</span>EquityCloseBuffer,0<span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span>1<span style="color: #000040;">+</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">close</span>,2<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>             
             loweq<span style="color: #000080;">=</span><span style="color: #8a2be2;">StringToDouble</span><span style="color: #008000;">&#40;</span> <span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>VirtualSystem.<span style="color: #007788;">VirtualEquity</span><span style="color: #008000;">&#91;</span>VirtualSystem.<span style="color: #007788;">VirtualLastEquityPos</span><span style="color: #000040;">-</span><span style="color: #8a2be2;">ArrayRange</span><span style="color: #008000;">&#40;</span>EquityCloseBuffer,0<span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span>1<span style="color: #000040;">+</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">low</span>,2<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                
            <span style="color: #008000;">&#125;</span>                                    
        <span style="color: #008000;">&#125;</span>
      fast_ma_now<span style="color: #000080;">=</span>SimpleMA<span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">ArrayRange</span><span style="color: #008000;">&#40;</span>EquityCloseBuffer,0<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span>1,EquityFastMAPeriod,EquityCloseBuffer<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      slow_ma_now<span style="color: #000080;">=</span>SimpleMA<span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">ArrayRange</span><span style="color: #008000;">&#40;</span>EquityCloseBuffer,0<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span>1,EquitySlowMAPeriod,EquityCloseBuffer<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      fast_ma_old<span style="color: #000080;">=</span>SimpleMA<span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">ArrayRange</span><span style="color: #008000;">&#40;</span>EquityCloseBuffer,0<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span>2,EquityFastMAPeriod,EquityCloseBuffer<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      slow_ma_old<span style="color: #000080;">=</span>SimpleMA<span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">ArrayRange</span><span style="color: #008000;">&#40;</span>EquityCloseBuffer,0<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span>2,EquitySlowMAPeriod,EquityCloseBuffer<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #808080;">//bullish ma cross on virtual system's equity line      </span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>fast_ma_now<span style="color: #000080;">&gt;</span>slow_ma_now<span style="color: #000040;">&amp;&amp;</span>fast_ma_old<span style="color: #000080;">&lt;</span>slow_ma_old<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>          
         RealTrading<span style="color: #000080;">=</span><span style="color: #008080;">&quot;STRAIGHT&quot;</span><span style="color: #008080;">;</span>
         <span style="color: #808080;">//replicating virtual portfolio into real</span>
         <span style="color: #808080;">//position sizes are calculated to be proportional with the real account equity</span>
         <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>SymbolsCount<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
            ManagePosition<span style="color: #008000;">&#40;</span>i,VirtualSystem.<span style="color: #007788;">VirtualGetPositionType</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span>, 
                    UnitsToLots<span style="color: #008000;">&#40;</span>
                     <span style="color: #008000;">&#40;</span>VirtualSystem.<span style="color: #007788;">VirtualGetPositionSize</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>
                      <span style="color: #8a2be2;">AccountInfoDouble</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">ACCOUNT_EQUITY</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">/</span>
                      VirtualSystem.<span style="color: #007788;">VirtualLastAccountEquity</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>
                      <span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span>,<span style="color: #333399;">SYMBOL_TRADE_CONTRACT_SIZE</span><span style="color: #008000;">&#41;</span>
                      ,SymbolsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #8a2be2;">Symbol</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
      <span style="color: #808080;">//bearish ma cross on virtual system's equity line        </span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>fast_ma_now<span style="color: #000080;">&lt;</span>slow_ma_now<span style="color: #000040;">&amp;&amp;</span>fast_ma_old<span style="color: #000080;">&gt;</span>slow_ma_old<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
         RealTrading<span style="color: #000080;">=</span><span style="color: #008080;">&quot;FORBIDDEN&quot;</span><span style="color: #008080;">;</span>
         <span style="color: #808080;">//closing real positions</span>
         <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>SymbolsCount<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
            ManagePosition<span style="color: #008000;">&#40;</span>i,FLAT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>         
        <span style="color: #008000;">&#125;</span>             
      VirtualLastBarTime<span style="color: #000080;">=</span>VirtualSystem.<span style="color: #007788;">VirtualEquity</span><span style="color: #008000;">&#91;</span>VirtualSystem.<span style="color: #007788;">VirtualLastEquityPos</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">opentime</span><span style="color: #008080;">;</span>
     <span style="color: #008000;">&#125;</span>
   <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Acesta este OnTick(). Ca si OnTick() precednt, are un ciclu de simboluri si aplica logica pentru fiecare simbol, de aceasta data pe contul virtual. Declara EquityCloseBuffer[] unde ultimele valori ale barelor de equity din contul virtual sunt copiate, dupa ce fiecare ciclu este inchis. Cand aces buffer are destule valori, o intersectie de medii mobile pe linia de equity a contului virtual este calculata. Cand aceaste medii mobile dau un semnal de crestere, RealTrading trece pe &#8220;STRAIGHT&#8221;. Portofoliul este replicat din contul virtual pe contul real, portofoliul este replicat din contul virutal pe contul efectiv, proportional cu marimea contului efectiv. Desigur, VirtualManagePosition() va apela la randul lui ManagePosition() , iar din acest moment ambele conturi vor functiona simultan. Cand semnalul mediilor mobile este de scadere, RealTrading este setat la &#8220;FORBIDDEN&#8221; iar pozitiile contului efectiv sunt inchise.</p>
<p>OnDeinit() este exact la fel, dupa cum handlerele indicatorilor rezida in aceeasi SymbolsTable[].</p>
<p><a href="http://mqlmagazine.com/ro/programarea-in-mql/virtualizarea-sistemelor-de-trading-pentru-ajustarea-liniei-de-equity-un-mit/attachment/virtualportfolioma-runs/" rel="attachment wp-att-1608"><img src="http://mqlmagazine.com/ro/wp-content/uploads/2010/05/VirtualPortfolioMA-runs.jpg" alt="" title="VirtualPortfolioMA runs" width="945" height="660" class="alignnone size-full wp-image-1608" /></a></p>
<p>Surprins? Executia pe portofoliu este mai instabila decat cea pe o singura pereche, asa cum a fost si pentru sistemul de trading principal. Volatilitatea suplimentara se traduce in miscari in range ale equity, care se transforma in semnale false date de mediile mobile pe equity, facand ca virtualizarea sa fie un fiasco. Exista cel putin trei puncte care trebuie luate in consideratie.</p>
<p>1. Frecventa samplingului<br />
Care este frecventa optima de sampling pentru media mobila pe equity? La urma urmei, nu stim exact cum MetaTrader comprima barele de equity deci nu stim nici macar intervalul lui de sampling. Atunci, cum sa stim sa extragem mostrele pentru medie?</p>
<p>2. Sistemul de trading optim pentru linia de equity<br />
Nimeni n-a zis ca mediile mobile peste equity sunt cea mai buna cale de ajustare. Alte criterii se pot aplica, la fel ca in tradingul obisnuit.</p>
<p>3. Ar trebui sa tranzactionam toate instrumentele in acelasi cont virtual, sau in conturi virtuale separate si sa ajustam linia de equity pentru fiecare?</p>
<p>Concluzia principala care se extrage e ca sistemele de trading nu trebuie sa fie bazate pe o aplicare rece, pura, a indicatorilor. Indicatorii, asa cum le spune si numele, <strong>indica</strong> unele actiuni care trebuie luate, dar precum consilierii care dau sfaturi, influenteaza pozitiv rezultatele sistemelor de trading, dar locul lor nu trebuie sa fie in miezul acestora. Mai degraba, <strong>statistici riguroase si relatii de arbitraj sunt la baza sistemelor de trading eficiente</strong>.</p>
<p>Linkuri:<br />
<a title="TradeVirtualization.mqh" href="http://mqlmagazine.com/wp-content/uploads/editions/may2010/TradeVirtualization.mqh" target="_top">TradeVirtualization.mqh</a><br />
<a title="VirtualPortfolioMA.mq5" href="http://mqlmagazine.com/wp-content/uploads/editions/may2010/VirtualPortfolioMA.mq5" target="_top">VirtualPortfolioMA.mq5</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mqlmagazine.com/ro/programarea-in-mql/virtualizarea-sistemelor-de-trading-pentru-ajustarea-liniei-de-equity-un-mit/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MQL5 : Implementarea unui motor CEP simplu</title>
		<link>http://mqlmagazine.com/ro/programarea-in-mql/mql5-implementarea-unui-motor-cep-simplu/</link>
		<comments>http://mqlmagazine.com/ro/programarea-in-mql/mql5-implementarea-unui-motor-cep-simplu/#comments</comments>
		<pubDate>Mon, 24 May 2010 21:36:30 +0000</pubDate>
		<dc:creator>Bogdan Caramalac, MQLmagazine sr.editor</dc:creator>
				<category><![CDATA[Programarea in MQL]]></category>

		<guid isPermaLink="false">http://mqlmagazine.com/ro/?p=1551</guid>
		<description><![CDATA[[English version] [MQLmagazine.com in english] [Editia romaneasca]
Aceasta editie a fost mai dificil de facut decat editiile precedente. Lansarea tarzie a Strategy Tester si numarul mare de defecte iesite la iveala in timpul realizarii motorului CEP au consumat foarte mult timp. Din acest moment, editiile revistei nu vor mai fi lunare, pentru ca vor contine foarte [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mqlmagazine.com/mql-programming/mql5-implementation-of-a-simple-cep-engine" target="_top">[English version]</a> <a title="[MQLmagazine.com in english]" href="http://mqlmagazine.com" target="_top">[MQLmagazine.com in english]</a> <a title="[Editia romaneasca]" href="http://mqlmagazine.com/ro" target="_top">[Editia romaneasca]</a></p>
<p>Aceasta editie a fost mai dificil de facut decat editiile precedente. Lansarea tarzie a Strategy Tester si numarul mare de defecte iesite la iveala in timpul realizarii motorului CEP au consumat foarte mult timp. Din acest moment, editiile revistei nu vor mai fi lunare, pentru ca vor contine foarte multa munca si imbunatatiri ale unor lucrari mai vechi. De aceea, de aceasta data adaugam <a href="http://forum.mqlmagazine.com/" target="_top">Forumul</a>.</p>
<p>Acum inapoi la motorul CEP.</p>
<p>Motorul CEP a fost unul din cele mai dificile lucruri posibile de scris in MQL5. A fost dificil nu numai pentru mine ca programator, ci a avut implicatii si asupra MT5 de asemenea, intrucat structura intortocheata de date pe care o foloseste a pus MetaTrader la incercare ; a necesitat munca de remediere a defectelor, in special la obiecte si alocari de memorie. Codul a reusit sa functioneze cu probleme minore abia la build-ul 270 (<strong>da, deja in mai</strong>) si complet curat pe build 271. Este un cod lung si dificil, pe care il voi sparge in bucati pentru a-l comenta. Am pastrat comentariile de linie si liniile de Print pentru a fi mai bine inteles de cititori. Algoritmul este usor modicat, nu e exact cel prezentat in <a title="Anatomia unui motor CEP simplu" href="http://mqlmagazine.com/ro/modelare-financiara/anatomia-unui-motor-cep-simplu/" target="_top">Anatomia unui motor CEP simplu</a> .</p>
<p>Urmatorul fisier va fi denumit <strong>CEPEngine.mqh</strong> :</p>

<div class="wp_codebox"><table width="100%" ><tr id="p155178"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
</pre></td><td class="code" id="p1551code78"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//|                                                    CEPEngine.mqh |</span>
<span style="color: #808080;">//|                                       Copyright Bogdan Caramalac |</span>
<span style="color: #808080;">//|                                           http://mqlmagazine.com |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #339900;">#property copyright &quot;Bogdan Caramalac&quot;</span>
<span style="color: #339900;">#property link      &quot;http://mqlmagazine.com&quot;</span>
&nbsp;
<span style="color: #339900;">#property version &quot;1.0&quot;;</span>
&nbsp;
<span style="color: #808080;">//*******************************************</span>
&nbsp;
<span style="color: #0000ff;">string</span> Replicate<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">string</span> s,<span style="color: #0000ff;">int</span> n<span style="color: #008000;">&#41;</span>
   <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">string</span> res<span style="color: #000080;">=</span><span style="color: #008080;">&quot;&quot;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> k<span style="color: #000080;">=</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>n<span style="color: #000080;">&lt;</span>1<span style="color: #008000;">&#41;</span>
      <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>res<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                    
   <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>k<span style="color: #000080;">=</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;=</span>n<span style="color: #008080;">;</span>k<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> 
       <span style="color: #008000;">&#123;</span>
        <span style="color: #8a2be2;">StringConcatenate</span><span style="color: #008000;">&#40;</span>res,res,s<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       <span style="color: #008000;">&#125;</span>
    <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>res<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #008000;">&#125;</span>          
&nbsp;
<span style="color: #0000ff;">string</span> BoolToString<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">bool</span> b<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>b<span style="color: #000080;">==</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span>
     <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;.T.&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   else
     <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;.F.&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>   
  <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #808080;">//*******************************************</span></pre></td></tr></table></div>

<p>Acestea sunt functii string foarte simple, necesare pentru functiile mai mari care traduc structuri in mesaje string, descrieri ale structurilor CEP. Prima functie va replica un string, iar a doua va returna un string pentru o variabila logica, intr-un stil gen FoxPro.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p155179"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
</pre></td><td class="code" id="p1551code79"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">struct</span> SimpleEvent
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
   <span style="color: #0000ff;">uint</span> EventID<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">uint</span> EventTime<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">uint</span> Reserved<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">ushort</span> BindCount<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">uint</span> Binds<span style="color: #008000;">&#91;</span>100<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
   <span style="color: #0000ff;">bool</span> BindEvent<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">uint</span> eventid,SimpleEvent<span style="color: #000040;">&amp;</span> s<span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      <span style="color: #0000ff;">bool</span> fd<span style="color: #008080;">;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s.<span style="color: #007788;">BindCount</span><span style="color: #000080;">==</span>0<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
         s.<span style="color: #007788;">Binds</span><span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>eventid<span style="color: #008080;">;</span>
         s.<span style="color: #007788;">BindCount</span><span style="color: #000040;">++</span><span style="color: #008080;">;</span>
         <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
      else
        <span style="color: #008000;">&#123;</span>
         fd<span style="color: #000080;">=</span><span style="color: #333399;">false</span><span style="color: #008080;">;</span>
         <span style="color: #808080;">//checking previous bind</span>
         <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>s.<span style="color: #007788;">BindCount</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
             <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s.<span style="color: #007788;">Binds</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span>eventid<span style="color: #008000;">&#41;</span>
               <span style="color: #008000;">&#123;</span>
                fd<span style="color: #000080;">=</span><span style="color: #333399;">true</span><span style="color: #008080;">;</span>
                <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
               <span style="color: #008000;">&#125;</span>
            <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (int i=0;i&lt;s.BindCount;i++)</span>
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>fd<span style="color: #000080;">==</span><span style="color: #333399;">false</span><span style="color: #008000;">&#41;</span>
           <span style="color: #008000;">&#123;</span>
            <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s.<span style="color: #007788;">BindCount</span><span style="color: #000080;">&lt;</span><span style="color: #8a2be2;">ArrayRange</span><span style="color: #008000;">&#40;</span>s.<span style="color: #007788;">Binds</span>,0<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span>1<span style="color: #008000;">&#41;</span>
              <span style="color: #008000;">&#123;</span>
               s.<span style="color: #007788;">Binds</span><span style="color: #008000;">&#91;</span>s.<span style="color: #007788;">BindCount</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>eventid<span style="color: #008080;">;</span>
               s.<span style="color: #007788;">BindCount</span><span style="color: #000040;">++</span><span style="color: #008080;">;</span>
               <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
              <span style="color: #008000;">&#125;</span>
            else
              <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">false</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
           <span style="color: #008000;">&#125;</span>
         else
           <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">false</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span><span style="color: #808080;">//else if (s.BindCount!=0)</span>
     <span style="color: #008000;">&#125;</span>
&nbsp;
   <span style="color: #0000ff;">int</span> FindBind<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">uint</span> eventid,SimpleEvent<span style="color: #000040;">&amp;</span> s<span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      <span style="color: #0000ff;">bool</span> fd<span style="color: #008080;">;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s.<span style="color: #007788;">BindCount</span><span style="color: #000080;">==</span>0<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
         <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span>1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
      else
        <span style="color: #008000;">&#123;</span>
         fd<span style="color: #000080;">=</span><span style="color: #333399;">false</span><span style="color: #008080;">;</span>
         <span style="color: #808080;">//checking previous bind</span>
         <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>s.<span style="color: #007788;">BindCount</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
             <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s.<span style="color: #007788;">Binds</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span>eventid<span style="color: #008000;">&#41;</span>
               <span style="color: #008000;">&#123;</span>
                <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
               <span style="color: #008000;">&#125;</span>
            <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (int i=0;i&lt;s.BindCount;i++)</span>
         <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span><span style="color: #000040;">-</span>1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
     <span style="color: #008000;">&#125;</span>     
&nbsp;
   <span style="color: #0000ff;">bool</span> UnbindEvent<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">uint</span> eventid,SimpleEvent<span style="color: #000040;">&amp;</span> s<span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s.<span style="color: #007788;">BindCount</span><span style="color: #000080;">==</span>0<span style="color: #008000;">&#41;</span>
        <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">false</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">int</span> fd<span style="color: #008080;">;</span>
      fd<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>s.<span style="color: #007788;">BindCount</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
         <span style="color: #008000;">&#123;</span>
          <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>s.<span style="color: #007788;">Binds</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span>eventid<span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
             fd<span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>
             <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span>
         <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (int i=0;i&lt;s.BindCount;i++)</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>fd<span style="color: #000080;">==</span>0<span style="color: #008000;">&#41;</span>
        <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">false</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      else
        <span style="color: #008000;">&#123;</span>
         <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> j<span style="color: #000080;">=</span>fd<span style="color: #000040;">+</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;</span>s.<span style="color: #007788;">BindCount</span><span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
             s.<span style="color: #007788;">Binds</span><span style="color: #008000;">&#91;</span>j<span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>s.<span style="color: #007788;">Binds</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span>
         s.<span style="color: #007788;">Binds</span><span style="color: #008000;">&#91;</span>s.<span style="color: #007788;">BindCount</span><span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
         s.<span style="color: #007788;">BindCount</span><span style="color: #000040;">--</span><span style="color: #008080;">;</span>
         <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (fd==0)</span>
     <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Structura SimpleEvent este la miezul motorului. Coada de evenimente pe care am descris-o in articolul precedent este facuta din micute structuri SimpleEvent. EventID joaca rol de ID, EventTime este timpul (in ticksi &#8211; milisecunde de la pornirea Windows &#8211; nu formatul datetime), BindCount spune cator evenimente complexe este asociat evenimentul simplu, iar Binds[] contine aceste evenimente. Functiile BindEvent(), FindBind(), si UnbindEvent() sunt cele care lucreaza cu acesta structura. Normal, ar fi trebuit sa optez pentru o clasa in loc de structura, dar ce castigi in functionarea clasei pierzi in manevrabilitatea datelor : nu poti copia obiecte, decat camp cu camp, altfel primesti <strong>Structura are obiecte si nu poate fi copiata</strong> (<em><strong>Structure have objects and cannot be copied</strong></em>).</p>

<div class="wp_codebox"><table width="100%" ><tr id="p155180"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="code" id="p1551code80"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">struct</span> SimpleEventArrangement
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">int</span> EventCount<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">uint</span> EventArray<span style="color: #008000;">&#91;</span>100<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> Prebinds<span style="color: #008000;">&#91;</span>100<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> NegationsCount<span style="color: #008000;">&#91;</span>100<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> <span style="color: #808080;">//how many negation events before each event from the array</span>
   <span style="color: #0000ff;">uint</span> NegationsArray<span style="color: #008000;">&#91;</span>10<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>100<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span> <span style="color: #808080;">//store negation events before each event from the array</span>
   <span style="color: #0000ff;">bool</span> NegationsChecked<span style="color: #008000;">&#91;</span>100<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><span style="color: #808080;">//checks of the first negations that match</span>
  <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">struct</span> ComplexEvent
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">uint</span> ComplexID<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">uint</span> TimeConstraint<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">ushort</span> ArrangementsCount<span style="color: #008080;">;</span>
   SimpleEventArrangement ArrangementsArray<span style="color: #008000;">&#91;</span>100<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Structura ComplexEvent este unitatea de baza a tabelei evenimentelor complexe. Va aduceti aminte imaginea din articolul precedent? Cam cuprinde ceea ce poate fi gasit in structura ComplexEvent. Astfel, avem ID-ul, constrangerea temporala, numarul de aranjamente (numarul de linii) sau versiuni ale cozilor de evenimente care constituie acelasi eveniment complex, si in final un tablou de aranjamente, constituit de mai multe SimpleEventArrangement.</p>
<p>Structura SimpleEventArrangement descrie ceea ce poate fi numita ca linie a matricii. Astfel, avem un contor si linia (adica EventArray[]) care contine evenimentele simple cerute. Tabloul Prebinds[] va nota, desigur, preasocierile acestor evenimente, adica pozitia in coada de evenimente simple care este gasita. NegationsCount[] va contine cate evenimente de negatie sunt cerute <strong>a nu aparea</strong> inainte de fiecare eveniment simplu care trebuie sa apara. Deci, un contor per fiecare eveniment simplu cerut. NegationsArray[] va contine evenimentele solicitate a nu aparea, <strong>pe coloane</strong> in loc de linii. NegationsChecked[] e un fel de tablou prescurtat de preasocieri. In loc sa stocheze locatiile negatiilor, un simplu steag este ridicat in acest tablou, pentru ca tabloul este unidimensional.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p155181"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
</pre></td><td class="code" id="p1551code81"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">void</span> MakeSimpleEventArrangement<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">string</span> s,SimpleEventArrangement<span style="color: #000040;">&amp;</span> arrg<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">int</span> len<span style="color: #000080;">=</span><span style="color: #8a2be2;">StringLen</span><span style="color: #008000;">&#40;</span>s<span style="color: #000040;">+</span><span style="color: #008080;">&quot; &quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">string</span> rdnow<span style="color: #000080;">=</span><span style="color: #008080;">&quot;&quot;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">string</span> c<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">uint</span> number,swap<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> normcount<span style="color: #008080;">;</span>
   arrg.<span style="color: #007788;">EventCount</span><span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">string</span> first<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> intg,d,crt<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">double</span> dbl<span style="color: #008080;">;</span>
   s<span style="color: #000080;">=</span>s<span style="color: #000040;">+</span><span style="color: #008080;">&quot; &quot;</span><span style="color: #008080;">;</span><span style="color: #808080;">//to make sure it registers last word</span>
   <span style="color: #8a2be2;">ArrayInitialize</span><span style="color: #008000;">&#40;</span>arrg.<span style="color: #007788;">EventArray</span>,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">ArrayInitialize</span><span style="color: #008000;">&#40;</span>arrg.<span style="color: #007788;">NegationsCount</span>,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">ArrayInitialize</span><span style="color: #008000;">&#40;</span>arrg.<span style="color: #007788;">NegationsArray</span>,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">ArrayInitialize</span><span style="color: #008000;">&#40;</span>arrg.<span style="color: #007788;">Prebinds</span>,<span style="color: #000040;">-</span>1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">ArrayInitialize</span><span style="color: #008000;">&#40;</span>arrg.<span style="color: #007788;">NegationsChecked</span>,<span style="color: #333399;">false</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   normcount<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>len<span style="color: #000040;">!</span><span style="color: #000080;">=</span>0<span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>len<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
         <span style="color: #008000;">&#123;</span>
          c<span style="color: #000080;">=</span><span style="color: #8a2be2;">StringSubstr</span><span style="color: #008000;">&#40;</span>s,i,1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
          <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>c<span style="color: #000080;">==</span><span style="color: #008080;">&quot; &quot;</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
             <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>rdnow<span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;&quot;</span><span style="color: #008000;">&#41;</span>
               <span style="color: #008000;">&#123;</span>
                first<span style="color: #000080;">=</span><span style="color: #8a2be2;">StringSubstr</span><span style="color: #008000;">&#40;</span>rdnow,0,1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>first<span style="color: #000080;">==</span><span style="color: #008080;">&quot;-&quot;</span><span style="color: #000040;">||</span>first<span style="color: #000080;">==</span><span style="color: #008080;">&quot;!&quot;</span><span style="color: #000040;">||</span>first<span style="color: #000080;">==</span><span style="color: #008080;">&quot;n&quot;</span><span style="color: #000040;">||</span>first<span style="color: #000080;">==</span><span style="color: #008080;">&quot;N&quot;</span><span style="color: #008000;">&#41;</span>
                  <span style="color: #008000;">&#123;</span>
                   number<span style="color: #000080;">=</span><span style="color: #8a2be2;">StringToInteger</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">StringSubstr</span><span style="color: #008000;">&#40;</span>rdnow,1,<span style="color: #8a2be2;">StringLen</span><span style="color: #008000;">&#40;</span>rdnow<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span>1<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>normcount<span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span>1<span style="color: #008000;">&#41;</span>   
                     <span style="color: #008000;">&#123;</span>
                      arrg.<span style="color: #007788;">NegationsArray</span><span style="color: #008000;">&#91;</span>normcount<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>arrg.<span style="color: #007788;">NegationsCount</span><span style="color: #008000;">&#91;</span>normcount<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>number<span style="color: #008080;">;</span>
                      arrg.<span style="color: #007788;">NegationsCount</span><span style="color: #008000;">&#91;</span>normcount<span style="color: #008000;">&#93;</span><span style="color: #000040;">++</span><span style="color: #008080;">;</span>
                     <span style="color: #008000;">&#125;</span>                  
                  <span style="color: #008000;">&#125;</span>
                else
                  <span style="color: #008000;">&#123;</span>
                   normcount<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
                   number<span style="color: #000080;">=</span><span style="color: #8a2be2;">StringToInteger</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">StringSubstr</span><span style="color: #008000;">&#40;</span>rdnow,0,<span style="color: #8a2be2;">StringLen</span><span style="color: #008000;">&#40;</span>rdnow<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                   arrg.<span style="color: #007788;">EventArray</span><span style="color: #008000;">&#91;</span>normcount<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>number<span style="color: #008080;">;</span>
                   arrg.<span style="color: #007788;">EventCount</span><span style="color: #000080;">=</span>normcount<span style="color: #000040;">+</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>
                  <span style="color: #008000;">&#125;</span>
                rdnow<span style="color: #000080;">=</span><span style="color: #008080;">&quot;&quot;</span><span style="color: #008080;">;</span>
               <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (rdnow!=&quot;&quot;)                </span>
            <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (c==&quot; &quot;)</span>
          else
            <span style="color: #008000;">&#123;</span>
             <span style="color: #8a2be2;">StringConcatenate</span><span style="color: #008000;">&#40;</span>rdnow,rdnow,c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span>
         <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (int i=0;i&lt;len;i++)</span>
       <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>rdnow<span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;&quot;</span><span style="color: #008000;">&#41;</span>
         <span style="color: #008000;">&#123;</span>
          first<span style="color: #000080;">=</span><span style="color: #8a2be2;">StringSubstr</span><span style="color: #008000;">&#40;</span>rdnow,0,1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
          <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>first<span style="color: #000080;">==</span><span style="color: #008080;">&quot;-&quot;</span><span style="color: #000040;">||</span>first<span style="color: #000080;">==</span><span style="color: #008080;">&quot;!&quot;</span><span style="color: #000040;">||</span>first<span style="color: #000080;">==</span><span style="color: #008080;">&quot;n&quot;</span><span style="color: #000040;">||</span>first<span style="color: #000080;">==</span><span style="color: #008080;">&quot;N&quot;</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
             number<span style="color: #000080;">=</span><span style="color: #8a2be2;">StringToInteger</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">StringSubstr</span><span style="color: #008000;">&#40;</span>rdnow,1,<span style="color: #8a2be2;">StringLen</span><span style="color: #008000;">&#40;</span>rdnow<span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span>1<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
             <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>normcount<span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span>1<span style="color: #008000;">&#41;</span>   
               <span style="color: #008000;">&#123;</span>
                arrg.<span style="color: #007788;">NegationsArray</span><span style="color: #008000;">&#91;</span>normcount<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>arrg.<span style="color: #007788;">NegationsCount</span><span style="color: #008000;">&#91;</span>normcount<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>number<span style="color: #008080;">;</span>
                arrg.<span style="color: #007788;">NegationsCount</span><span style="color: #008000;">&#91;</span>normcount<span style="color: #008000;">&#93;</span><span style="color: #000040;">++</span><span style="color: #008080;">;</span>
               <span style="color: #008000;">&#125;</span>                  
            <span style="color: #008000;">&#125;</span>
          else
            <span style="color: #008000;">&#123;</span>
             normcount<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
             number<span style="color: #000080;">=</span><span style="color: #8a2be2;">StringToInteger</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">StringSubstr</span><span style="color: #008000;">&#40;</span>rdnow,0,<span style="color: #8a2be2;">StringLen</span><span style="color: #008000;">&#40;</span>rdnow<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
             arrg.<span style="color: #007788;">EventArray</span><span style="color: #008000;">&#91;</span>normcount<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>number<span style="color: #008080;">;</span>
             arrg.<span style="color: #007788;">EventCount</span><span style="color: #000080;">=</span>normcount<span style="color: #000040;">+</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span>
          rdnow<span style="color: #000080;">=</span><span style="color: #008080;">&quot;&quot;</span><span style="color: #008080;">;</span>
         <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (rdnow!=&quot;&quot;)</span>
&nbsp;
      <span style="color: #808080;">//reversing event order</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>arrg.<span style="color: #007788;">EventCount</span><span style="color: #000080;">&gt;</span>0<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
         dbl<span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span>arrg.<span style="color: #007788;">EventCount</span><span style="color: #000040;">/</span>2,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
         intg<span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">MathRound</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span>arrg.<span style="color: #007788;">EventCount</span>,0<span style="color: #008000;">&#41;</span><span style="color: #000040;">/</span>2<span style="color: #008000;">&#41;</span>,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>dbl<span style="color: #000080;">==</span>intg<span style="color: #008000;">&#41;</span>
           d<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
         else
           d<span style="color: #000080;">=</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>           
         crt<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>         
         <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>intg<span style="color: #000040;">-</span>1<span style="color: #000040;">-</span>d<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>             
             swap<span style="color: #000080;">=</span>arrg.<span style="color: #007788;">EventArray</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
             arrg.<span style="color: #007788;">EventArray</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>arrg.<span style="color: #007788;">EventArray</span><span style="color: #008000;">&#91;</span>arrg.<span style="color: #007788;">EventCount</span><span style="color: #000040;">-</span>1<span style="color: #000040;">-</span>crt<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
             arrg.<span style="color: #007788;">EventArray</span><span style="color: #008000;">&#91;</span>arrg.<span style="color: #007788;">EventCount</span><span style="color: #000040;">-</span>1<span style="color: #000040;">-</span>crt<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>swap<span style="color: #008080;">;</span>             
             <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> l<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>l<span style="color: #000080;">&lt;</span><span style="color: #8a2be2;">ArrayRange</span><span style="color: #008000;">&#40;</span>arrg.<span style="color: #007788;">NegationsArray</span>,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>l<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>                 
                 swap<span style="color: #000080;">=</span>arrg.<span style="color: #007788;">NegationsArray</span><span style="color: #008000;">&#91;</span>l<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
                 arrg.<span style="color: #007788;">NegationsArray</span><span style="color: #008000;">&#91;</span>l<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>arrg.<span style="color: #007788;">NegationsArray</span><span style="color: #008000;">&#91;</span>l<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>arrg.<span style="color: #007788;">EventCount</span><span style="color: #000040;">-</span>1<span style="color: #000040;">-</span>crt<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
                 arrg.<span style="color: #007788;">NegationsArray</span><span style="color: #008000;">&#91;</span>l<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>arrg.<span style="color: #007788;">EventCount</span><span style="color: #000040;">-</span>1<span style="color: #000040;">-</span>crt<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>swap<span style="color: #008080;">;</span>
                <span style="color: #008000;">&#125;</span>
             crt<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span>
&nbsp;
     <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (len!=0)</span>
   <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Functia MakeSimpleArrangement() va construi un aranjament de evenimente simple, dintr-un sir, asa cum e instruita de user. De exemplu, &#8220;10 !6 11&#8243; inseamna &#8220;10, urmat de 11, dar 6 trebuie sa nu apara inainte de 11&#8243;. Bara de spatiu este separator, iar steagul de negatie poate fi &#8220;-&#8221;,&#8221;!&#8221;,&#8221;n&#8221; sau &#8220;N&#8221;. De notat ca inainte de sfarsit, datele sunt inversate, de la prima la ultima, dupa cum am spus in evenimentul precedent, iar aranjamentele de evenimente complexe vor incepe de la cele mai recente catre cele mai vechi, Aceasta functie nu trebuie sa fie apelata de utilizator, ci va fi apelata de MakeComplexEvent().</p>

<div class="wp_codebox"><table width="100%" ><tr id="p155182"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
</pre></td><td class="code" id="p1551code82"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">void</span> MakeComplexEvent<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">string</span> s,<span style="color: #0000ff;">uint</span> eventid,<span style="color: #0000ff;">uint</span> time,ComplexEvent <span style="color: #000040;">&amp;</span>cplx<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">int</span> len<span style="color: #000080;">=</span><span style="color: #8a2be2;">StringLen</span><span style="color: #008000;">&#40;</span>s<span style="color: #000040;">+</span><span style="color: #008080;">&quot; &quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">string</span> rdnow<span style="color: #000080;">=</span><span style="color: #008080;">&quot;&quot;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">string</span> c<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">string</span> arrg<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">ushort</span> cnt<span style="color: #008080;">;</span>
   s<span style="color: #000080;">=</span>s<span style="color: #000040;">+</span><span style="color: #008080;">&quot; &quot;</span><span style="color: #008080;">;</span>
   cplx.<span style="color: #007788;">ComplexID</span><span style="color: #000080;">=</span>eventid<span style="color: #008080;">;</span>
   cplx.<span style="color: #007788;">TimeConstraint</span><span style="color: #000080;">=</span>time<span style="color: #008080;">;</span>
   cplx.<span style="color: #007788;">ArrangementsCount</span><span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>len<span style="color: #000040;">!</span><span style="color: #000080;">=</span>0<span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>len<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
         <span style="color: #008000;">&#123;</span>
          c<span style="color: #000080;">=</span><span style="color: #8a2be2;">StringSubstr</span><span style="color: #008000;">&#40;</span>s,i,1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
          <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>c<span style="color: #000080;">==</span><span style="color: #008080;">&quot;;&quot;</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
             <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>rdnow<span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;&quot;</span><span style="color: #008000;">&#41;</span>
               <span style="color: #008000;">&#123;</span>
                MakeSimpleEventArrangement<span style="color: #008000;">&#40;</span>rdnow,cplx.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>cplx.<span style="color: #007788;">ArrangementsCount</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                cplx.<span style="color: #007788;">ArrangementsCount</span><span style="color: #000040;">++</span><span style="color: #008080;">;</span>
                rdnow<span style="color: #000080;">=</span><span style="color: #008080;">&quot;&quot;</span><span style="color: #008080;">;</span>
               <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (rdnow!=&quot;&quot;)</span>
            <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (c==&quot; &quot;)</span>
          else
            <span style="color: #8a2be2;">StringConcatenate</span><span style="color: #008000;">&#40;</span>rdnow,rdnow,c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
         <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (int i=0;i&lt;len;i++)</span>
      <span style="color: #808080;">//for last word</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>rdnow<span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #008080;">&quot;&quot;</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
         MakeSimpleEventArrangement<span style="color: #008000;">&#40;</span>rdnow,cplx.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>cplx.<span style="color: #007788;">ArrangementsCount</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
         cplx.<span style="color: #007788;">ArrangementsCount</span><span style="color: #000040;">++</span><span style="color: #008080;">;</span>
         rdnow<span style="color: #000080;">=</span><span style="color: #008080;">&quot;&quot;</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (rdnow!=&quot;&quot;)</span>
     <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (len!=0)</span>
   <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Functia MakeComplexEvent() trebuie sa fie apelata de utilizator cand spune motorului cum trebuie sa arate evenimentele complexe. Definitia este un sir mare cu mai multe evenimente simple, separate de punct si virgula. Alti parametri mai sunt ID-ul, constrangerea temporala si o variabila eveniment complex in care sa fie asezat rezultatul.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p155183"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
</pre></td><td class="code" id="p1551code83"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">string</span> ComplexEventToString<span style="color: #008000;">&#40;</span>ComplexEvent<span style="color: #000040;">&amp;</span> c<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">string</span> res<span style="color: #000080;">=</span><span style="color: #008080;">&quot;&quot;</span><span style="color: #008080;">;</span>
   res<span style="color: #000080;">=</span>res<span style="color: #000040;">+</span><span style="color: #008080;">&quot;ComplexID &quot;</span><span style="color: #000040;">+</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>c.<span style="color: #007788;">ComplexID</span>,<span style="color: #008000;">0</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span><span style="color: #008080;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008080;">;</span>
   res<span style="color: #000080;">=</span>res<span style="color: #000040;">+</span><span style="color: #008080;">&quot;Arrangements &quot;</span><span style="color: #000040;">+</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>c.<span style="color: #007788;">ArrangementsCount</span>,<span style="color: #008000;">0</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span><span style="color: #008080;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>c.<span style="color: #007788;">ArrangementsCount</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>
       res<span style="color: #000080;">=</span>res<span style="color: #000040;">+</span><span style="color: #008080;">&quot;Events: &quot;</span><span style="color: #000040;">+</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>c.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventCount</span>,<span style="color: #008000;">0</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span><span style="color: #008080;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008080;">;</span>
       <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> j<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;</span>c.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventCount</span><span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
          <span style="color: #008000;">&#123;</span>
           res<span style="color: #000080;">=</span>res<span style="color: #000040;">+</span><span style="color: #008080;">&quot; &quot;</span><span style="color: #000040;">+</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>c.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventArray</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
          <span style="color: #008000;">&#125;</span>
       res<span style="color: #000080;">=</span>res<span style="color: #000040;">+</span><span style="color: #008080;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008080;">;</span>       
       res<span style="color: #000080;">=</span>res<span style="color: #000040;">+</span><span style="color: #008080;">&quot;Negations:<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008080;">;</span>
       <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> j<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;</span><span style="color: #008000;">10</span><span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
          <span style="color: #008000;">&#123;</span>
           <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> k<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>k<span style="color: #000080;">&lt;</span>c.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventCount</span><span style="color: #008080;">;</span>k<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
              <span style="color: #008000;">&#123;</span>
               res<span style="color: #000080;">=</span>res<span style="color: #000040;">+</span><span style="color: #008080;">&quot; &quot;</span><span style="color: #000040;">+</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>c.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">NegationsArray</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>k<span style="color: #008000;">&#93;</span>,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
              <span style="color: #008000;">&#125;</span>
           res<span style="color: #000080;">=</span>res<span style="color: #000040;">+</span><span style="color: #008080;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008080;">;</span>
          <span style="color: #008000;">&#125;</span>
       res<span style="color: #000080;">=</span>res<span style="color: #000040;">+</span><span style="color: #008080;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008080;">;</span>
      <span style="color: #008000;">&#125;</span>
   <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>res<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Aceasta functie a fost facuta numai din ratiuni de comentare. Functia descrie un eveniment complex intr-o forma sir. Poti scoate rezultatul pe ecran cu Comment().</p>

<div class="wp_codebox"><table width="100%" ><tr id="p155184"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre></td><td class="code" id="p1551code84"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">class</span> CEPEngine
  <span style="color: #008000;">&#123;</span>
   <span style="color: #808080;">//setup elements</span>
   <span style="color: #0000ff;">private</span><span style="color: #008080;">:</span>
   <span style="color: #0000ff;">uint</span> QueueTimeConstraint<span style="color: #008080;">;</span>
   ComplexEvent ComplexEventsTable<span style="color: #008000;">&#91;</span>30<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">ushort</span> ComplexEventsCount<span style="color: #008080;">;</span>
   <span style="color: #808080;">//data</span>
   SimpleEvent EventsQueue<span style="color: #008000;">&#91;</span>1000<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>    
   <span style="color: #0000ff;">int</span> OldestIndex<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">uint</span> OldestTime<span style="color: #008080;">;</span>
&nbsp;
   <span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
   <span style="color: #0000ff;">void</span> CEPEngine<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #808080;">//constructor</span>
   <span style="color: #0000ff;">void</span> ClearEvents<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #808080;">//cleans event table</span>
   <span style="color: #0000ff;">void</span> AddComplexEvent<span style="color: #008000;">&#40;</span>ComplexEvent <span style="color: #000040;">&amp;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>   
   <span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">void</span> EventsCallback<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">uint</span> EventID<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #808080;">//here you treat raised events from the CEP Engine</span>
   <span style="color: #0000ff;">void</span> SetupEngineMilliseconds<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">uint</span> ms<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">void</span> RaiseEvent<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">uint</span> EventID<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">void</span> EngineRun<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">string</span> StatusString<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>In final, am ajuns si la clasa motorului CEP.<br />
QueueTimeConstraint este o variabila importanta, care spune lungimea in timp pentru care motorul se va uita in coada. Evenimentele simple care sosesc, gasite in EventsQueue[] si care trec dincolo de &#8220;orizontul de timp&#8221; sunt suprascrise. OldestIndex este capatul tabloului ; este un capat dinamic, calculat la fiecare noua apelare RaiseEvent() din exterior, respectand QueueTimeConstraint, si are timpul, in ticksi, in OldestTime.</p>
<p>Acum lucrurile mici:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p155185"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
</pre></td><td class="code" id="p1551code85"><pre class="mql5" style="font-family:monospace;">   <span style="color: #0000ff;">void</span> CEPEngine<span style="color: #008080;">::</span><span style="color: #007788;">ClearEvents</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>  <span style="color: #808080;">//cleans event table</span>
     <span style="color: #008000;">&#123;</span>
      <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span><span style="color: #8a2be2;">ArrayRange</span><span style="color: #008000;">&#40;</span>ComplexEventsTable,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
         <span style="color: #008000;">&#123;</span>
          ComplexEventsTable<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsCount</span><span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
         <span style="color: #008000;">&#125;</span>
      <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span><span style="color: #8a2be2;">ArrayRange</span><span style="color: #008000;">&#40;</span>EventsQueue,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
          <span style="color: #008000;">&#123;</span>
           EventsQueue<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventID</span><span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
           EventsQueue<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventTime</span><span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
           EventsQueue<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">BindCount</span><span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
           <span style="color: #8a2be2;">ArrayInitialize</span><span style="color: #008000;">&#40;</span>EventsQueue<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Binds</span>,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
          <span style="color: #008000;">&#125;</span>
      OldestIndex<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>
      OldestTime<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
      ComplexEventsCount<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
     <span style="color: #008000;">&#125;</span>  
&nbsp;
   <span style="color: #0000ff;">void</span> CEPEngine<span style="color: #008080;">::</span><span style="color: #007788;">CEPEngine</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      ClearEvents<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
     <span style="color: #008000;">&#125;</span>
&nbsp;
   <span style="color: #0000ff;">void</span> CEPEngine<span style="color: #008080;">::</span><span style="color: #007788;">AddComplexEvent</span><span style="color: #008000;">&#40;</span>ComplexEvent <span style="color: #000040;">&amp;</span>c<span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      ComplexEventsTable<span style="color: #008000;">&#91;</span>ComplexEventsCount<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>c<span style="color: #008080;">;</span>
      ComplexEventsCount<span style="color: #000080;">=</span>ComplexEventsCount<span style="color: #000040;">+</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>
     <span style="color: #008000;">&#125;</span>
&nbsp;
&nbsp;
   <span style="color: #0000ff;">void</span> CEPEngine<span style="color: #008080;">::</span><span style="color: #007788;">SetupEngineMilliseconds</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">uint</span> ms<span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      QueueTimeConstraint<span style="color: #000080;">=</span>ms<span style="color: #008080;">;</span>
      <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
     <span style="color: #008000;">&#125;</span>
&nbsp;
&nbsp;
   <span style="color: #0000ff;">void</span> CEPEngine<span style="color: #008080;">::</span><span style="color: #007788;">EventsCallback</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">uint</span> EventID<span style="color: #008000;">&#41;</span><span style="color: #808080;">//here you treat raised events from the CEP Engine</span>
     <span style="color: #008000;">&#123;</span>
     <span style="color: #008000;">&#125;</span>   
&nbsp;
    <span style="color: #0000ff;">string</span> CEPEngine<span style="color: #008080;">::</span><span style="color: #007788;">StatusString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
       <span style="color: #008000;">&#123;</span>
        <span style="color: #0000ff;">string</span> res<span style="color: #000080;">=</span><span style="color: #008080;">&quot;&quot;</span><span style="color: #008080;">;</span>
        <span style="color: #0000ff;">string</span> eventtext<span style="color: #008080;">;</span>
        <span style="color: #0000ff;">int</span> etl<span style="color: #008080;">;</span>
        <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ComplexEventsCount<span style="color: #000040;">!</span><span style="color: #000080;">=</span>0<span style="color: #008000;">&#41;</span>
          <span style="color: #008000;">&#123;</span>
           <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> c<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>c<span style="color: #000080;">&lt;</span>ComplexEventsCount<span style="color: #008080;">;</span>c<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
              <span style="color: #008000;">&#123;</span>
               eventtext<span style="color: #000080;">=</span><span style="color: #008080;">&quot;[&quot;</span><span style="color: #000040;">+</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ComplexID</span>,<span style="color: #008000;">0</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span><span style="color: #008080;">&quot;]::&quot;</span><span style="color: #008080;">;</span>
               etl<span style="color: #000080;">=</span><span style="color: #8a2be2;">StringLen</span><span style="color: #008000;">&#40;</span>eventtext<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
               res<span style="color: #000080;">=</span>res<span style="color: #000040;">+</span>eventtext<span style="color: #008080;">;</span>
               <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsCount</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>0<span style="color: #008000;">&#41;</span>
                 <span style="color: #008000;">&#123;</span>
                  <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>a<span style="color: #000080;">&lt;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsCount</span><span style="color: #008080;">;</span>a<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
                     <span style="color: #008000;">&#123;</span>                     
                      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventCount</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>0<span style="color: #008000;">&#41;</span>
                        <span style="color: #008000;">&#123;</span>                         
                         <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> e<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>e<span style="color: #000080;">&lt;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventCount</span><span style="color: #008080;">;</span>e<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
                            <span style="color: #008000;">&#123;</span>
                             res<span style="color: #000080;">=</span>res<span style="color: #000040;">+</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Prebinds</span><span style="color: #008000;">&#91;</span>e<span style="color: #008000;">&#93;</span>,<span style="color: #008000;">0</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span><span style="color: #008080;">&quot;  &quot;</span><span style="color: #008080;">;</span>
                            <span style="color: #008000;">&#125;</span>
                         res<span style="color: #000080;">=</span>res<span style="color: #000040;">+</span><span style="color: #008080;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #000040;">+</span>Replicate<span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot; &quot;</span>,etl<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                         <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> e<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>e<span style="color: #000080;">&lt;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventCount</span><span style="color: #008080;">;</span>e<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
                            <span style="color: #008000;">&#123;</span>
                             res<span style="color: #000080;">=</span>res<span style="color: #000040;">+</span>BoolToString<span style="color: #008000;">&#40;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">NegationsChecked</span><span style="color: #008000;">&#91;</span>e<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span><span style="color: #008080;">&quot;  &quot;</span><span style="color: #008080;">;</span>
                            <span style="color: #008000;">&#125;</span>
                         res<span style="color: #000080;">=</span>res<span style="color: #000040;">+</span><span style="color: #008080;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #008080;">;</span>
                         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>a<span style="color: #000040;">!</span><span style="color: #000080;">=</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsCount</span><span style="color: #000040;">-</span><span style="color: #008000;">1</span><span style="color: #008000;">&#41;</span>
                           <span style="color: #008000;">&#123;</span>
                            res<span style="color: #000080;">=</span>res<span style="color: #000040;">+</span>Replicate<span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot; &quot;</span>,etl<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                           <span style="color: #008000;">&#125;</span>                      
                        <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (ComplexEventsTable[c].ArrangementsArray[a].EventCount!=0)                   </span>
                     <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (int a=0;a&lt;ComplexEventsTable[c].ArrangementsCount;a++)</span>
                 <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (ComplexEventsTable[c].ArrangementsCount!=0)</span>
              <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (int c=0;c&lt;ComplexEventsCount;c++)           </span>
          <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (ComplexEventsCount!=0) </span>
        <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>res<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Deci, ClearEvents() goleste coada de evenimente simple. Aceasta este si ratiunea pentru care este apelata din constructorul CEPEngine(). AddComplexEvent() adauga un nou eveniment complex la tabela. Trebuie sa fie apelat de utilizator, dupa construirea evenimentelor cu MakeComplexEvent(). Motorul e gata de lucru numai dupa ce constrangerea temporala e setata de utilizator cu SetupEngineMilliseconds(). Si, in final, EventsCallback() este metoda virtuala care trebuie sa fie redefinita de utilizator, fiind apelata cand motorul CEP ridica un eveniment complex. Functia StatusString() produce o versiune comentariu a starii motorului.</p>
<p>Acum <em>ceva mai complicat</em> : <strong>RaiseEvent() : cand utilizatorul ridica un eveniment simplu</strong></p>

<div class="wp_codebox"><table width="100%" ><tr id="p155186"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
</pre></td><td class="code" id="p1551code86"><pre class="mql5" style="font-family:monospace;">    <span style="color: #0000ff;">void</span> CEPEngine<span style="color: #008080;">::</span><span style="color: #007788;">RaiseEvent</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">uint</span> EventID<span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>
       <span style="color: #0000ff;">long</span> time<span style="color: #000080;">=</span><span style="color: #8a2be2;">GetTickCount</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       <span style="color: #0000ff;">bool</span> isforbidden<span style="color: #000080;">=</span><span style="color: #333399;">true</span><span style="color: #008080;">;</span>
       <span style="color: #0000ff;">uint</span> opposite<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
       <span style="color: #0000ff;">uint</span> difft<span style="color: #008080;">;</span>
       <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>OldestIndex<span style="color: #000080;">&gt;</span>0<span style="color: #008000;">&#41;</span>
         <span style="color: #008000;">&#123;</span>
          <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span><span style="color: #8a2be2;">ArrayRange</span><span style="color: #008000;">&#40;</span>EventsQueue,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
             <span style="color: #008000;">&#123;</span>
              <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>EventsQueue<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventTime</span><span style="color: #000080;">==</span>0<span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                 OldestIndex<span style="color: #000080;">=</span>i<span style="color: #000040;">-</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>
                 OldestTime<span style="color: #000080;">=</span>EventsQueue<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventTime</span><span style="color: #008080;">;</span>
                 <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
                <span style="color: #008000;">&#125;</span>
              <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>time<span style="color: #000040;">-</span>EventsQueue<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventTime</span><span style="color: #000080;">&gt;</span>QueueTimeConstraint<span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>
                 OldestIndex<span style="color: #000080;">=</span>i<span style="color: #000040;">-</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>
                 OldestTime<span style="color: #000080;">=</span>EventsQueue<span style="color: #008000;">&#91;</span>i<span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventTime</span><span style="color: #008080;">;</span>
                 <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
                <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (time-EventsQueue[i].EventTime&gt;QueueTimeConstraint)  </span>
             <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (int i=0;i&lt;OldestIndex+1;i++)</span>
         <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (OldestIndex!=0)</span>
       else
         <span style="color: #008000;">&#123;</span>
          <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>OldestIndex<span style="color: #000080;">&lt;=</span>0<span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
             OldestIndex<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
             OldestTime<span style="color: #000080;">=</span>time<span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span>
         <span style="color: #008000;">&#125;</span>
       <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> j<span style="color: #000080;">=</span>OldestIndex<span style="color: #000040;">+</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&gt;</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>j<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
          <span style="color: #008000;">&#123;</span>
           EventsQueue<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventID</span><span style="color: #000080;">=</span>EventsQueue<span style="color: #008000;">&#91;</span>j<span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventID</span><span style="color: #008080;">;</span>
           EventsQueue<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventTime</span><span style="color: #000080;">=</span>EventsQueue<span style="color: #008000;">&#91;</span>j<span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventTime</span><span style="color: #008080;">;</span>
           EventsQueue<span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">BindCount</span><span style="color: #000080;">=</span>EventsQueue<span style="color: #008000;">&#91;</span>j<span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">BindCount</span><span style="color: #008080;">;</span>
          <span style="color: #008000;">&#125;</span>
       <span style="color: #8a2be2;">ArrayInitialize</span><span style="color: #008000;">&#40;</span>EventsQueue<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Binds</span>,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       EventsQueue<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventID</span><span style="color: #000080;">=</span>EventID<span style="color: #008080;">;</span>
       EventsQueue<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventTime</span><span style="color: #000080;">=</span>time<span style="color: #008080;">;</span>
       EventsQueue<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">BindCount</span><span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
       OldestIndex<span style="color: #000080;">=</span>OldestIndex<span style="color: #000040;">+</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>
&nbsp;
       <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ComplexEventsCount<span style="color: #000040;">!</span><span style="color: #000080;">=</span>0<span style="color: #008000;">&#41;</span>
         <span style="color: #008000;">&#123;</span>
          EngineRun<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
         <span style="color: #008000;">&#125;</span>         
       <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
      <span style="color: #008000;">&#125;</span><span style="color: #808080;">//raise event ends</span></pre></td></tr></table></div>

<p>Functia are un nivel moderat de complexitate.<br />
Liniile 7 &#8211; 32 stabilesc orizontul de timp in interiorul cozii. Adica stabilesc care este cel mai vechi eveniment din coada care respecta constrangerea temporala a intregii cozi.<br />
Liniile 33 &#8211; 38 misca coada cu un pas mai jos, facand loc pentru un nou eveniment simplu.<br />
Line 74 – metoda EngineRun() este apelata pentru a procesa noile date, daca cel putin un eveniment complex este inregistrat in tabela.</p>
<p><strong>Inima motorului CEP este metoda EngineRun().</strong>Este cea mai complicata piesa de cod din intreaga clasa. Dar, n-ar exista masina fara motor, nu ?</p>

<div class="wp_codebox"><table width="100%" ><tr id="p155187"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
</pre></td><td class="code" id="p1551code87"><pre class="mql5" style="font-family:monospace;">   <span style="color: #0000ff;">void</span> CEPEngine<span style="color: #008080;">::</span><span style="color: #007788;">EngineRun</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      <span style="color: #0000ff;">long</span> time<span style="color: #000080;">=</span><span style="color: #8a2be2;">GetTickCount</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">bool</span> any_binded<span style="color: #008080;">;</span>
      <span style="color: #0000ff;">int</span> CrtColumn<span style="color: #008000;">&#91;</span>100<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>100<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span><span style="color: #808080;">//address CrtColumn as CrtColumn(event,arrangement)</span>
      <span style="color: #0000ff;">bool</span> bypass<span style="color: #000080;">=</span><span style="color: #333399;">false</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">int</span> q,p<span style="color: #008080;">;</span>
      <span style="color: #0000ff;">int</span> j,lastj<span style="color: #008080;">;</span>
      <span style="color: #0000ff;">int</span> test<span style="color: #008080;">;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ComplexEventsCount<span style="color: #000080;">==</span>0<span style="color: #008000;">&#41;</span>
        <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
      <span style="color: #8a2be2;">ArrayInitialize</span><span style="color: #008000;">&#40;</span>CrtColumn,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> c<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>c<span style="color: #000080;">&lt;</span>ComplexEventsCount<span style="color: #008080;">;</span>c<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
         <span style="color: #008000;">&#123;</span>
          <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;Arrangements in complex event &quot;</span>,c,<span style="color: #008080;">&quot; are &quot;</span>,ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsCount</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
          <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsCount</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>0<span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>                          
             <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>a<span style="color: #000080;">&lt;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsCount</span><span style="color: #008080;">;</span>a<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>      
                 <span style="color: #808080;">//Check if the current simple event within arrangement within current complex event is to be binded</span>
                 <span style="color: #808080;">//by checking with simple events from the queue</span>
                 p<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>                                       
                 <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>time<span style="color: #000040;">-</span>EventsQueue<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventTime</span><span style="color: #000080;">&lt;=</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">TimeConstraint</span><span style="color: #008000;">&#41;</span>
                   <span style="color: #008000;">&#123;</span>
                    <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;Looking on entry &quot;</span>,p,<span style="color: #008080;">&quot; where is simple event &quot;</span>,EventsQueue<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventID</span>,<span style="color: #008080;">&quot; comparing with &quot;</span>,ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventArray</span><span style="color: #008000;">&#91;</span>CrtColumn<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span>,<span style="color: #008080;">&quot; on complex event &quot;</span>,c,<span style="color: #008080;">&quot;, arrg. &quot;</span>,a,<span style="color: #008080;">&quot; (column &quot;</span>,CrtColumn<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>,<span style="color: #008080;">&quot;) vs count &quot;</span>,ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventCount</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                       
                    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>EventsQueue<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventID</span><span style="color: #000080;">==</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventArray</span><span style="color: #008000;">&#91;</span>CrtColumn<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
                      <span style="color: #008000;">&#123;</span>
                       <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;Found simple event &quot;</span>,EventsQueue<span style="color: #008000;">&#91;</span>p<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventID</span>,<span style="color: #008080;">&quot; for column &quot;</span>,CrtColumn<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>,<span style="color: #008080;">&quot; of arrangement &quot;</span>,a,<span style="color: #008080;">&quot; of event &quot;</span>,c,<span style="color: #008080;">&quot; meaningly id=&quot;</span>,ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ComplexID</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> 
                       ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Prebinds</span><span style="color: #008000;">&#91;</span>CrtColumn<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>p<span style="color: #008080;">;</span>
                       CrtColumn<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">++</span><span style="color: #008080;">;</span>                                                                                        
                       bypass<span style="color: #000080;">=</span><span style="color: #333399;">false</span><span style="color: #008080;">;</span>
                       <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>CrtColumn<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000080;">&gt;</span>1<span style="color: #008000;">&#41;</span>
                         <span style="color: #008000;">&#123;</span>
                          q<span style="color: #000080;">=</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Prebinds</span><span style="color: #008000;">&#91;</span>CrtColumn<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>2<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
                          <span style="color: #808080;">//-2 instead of -1 because we already incremented the CrtColumn by ++</span>
                          <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;Checking negations from previous bind, &quot;</span>,q,<span style="color: #008080;">&quot; to current element &quot;</span>,p<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                          q<span style="color: #000080;">=</span>q<span style="color: #000040;">+</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>
                          <span style="color: #808080;">//Checking negations; if test passes, simple event is prebinded;                                                          </span>
                          <span style="color: #808080;">//q is an older event than the current one, p, so q&gt;p</span>
                          <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">NegationsCount</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>0<span style="color: #008000;">&#41;</span>
                            <span style="color: #008000;">&#123;</span>                                                
                             <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>q<span style="color: #000080;">&lt;</span>p<span style="color: #008000;">&#41;</span>
                               <span style="color: #008000;">&#123;</span>
                                <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> j<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">NegationsCount</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
                                   <span style="color: #008000;">&#123;</span>
                                    lastj<span style="color: #000080;">=</span>j<span style="color: #008080;">;</span>
                                    <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;Comparing event on &quot;</span>,q,<span style="color: #008080;">&quot; meaningly &quot;</span>,EventsQueue<span style="color: #008000;">&#91;</span>q<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventID</span>,<span style="color: #008080;">&quot; with negation &quot;</span>,ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">NegationsArray</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>CrtColumn<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>2<span style="color: #000040;">+</span>1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                                    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>EventsQueue<span style="color: #008000;">&#91;</span>q<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventID</span><span style="color: #000080;">==</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">NegationsArray</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>CrtColumn<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>2<span style="color: #000040;">+</span>1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
                                      <span style="color: #008000;">&#123;</span>
                                       ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">NegationsChecked</span><span style="color: #008000;">&#91;</span>j<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #333399;">true</span><span style="color: #008080;">;</span>
                                       <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
                                      <span style="color: #008000;">&#125;</span>
                                   <span style="color: #008000;">&#125;</span>
                                 <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">NegationsChecked</span><span style="color: #008000;">&#91;</span>lastj<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span>
                                   <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
                                 q<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
                                <span style="color: #008000;">&#125;</span>
                            <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (ComplexEventsTable[c].ArrangementsArray[a].NegationsCount!=0)</span>
                          <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">NegationsChecked</span><span style="color: #008000;">&#91;</span>lastj<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span>
                            <span style="color: #008000;">&#123;</span>
                             <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;Erasing last bind on &quot;</span>,CrtColumn<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span><span style="color: #008000;">1</span>,<span style="color: #008080;">&quot;. Decreasing current column for complex &quot;</span>,c,<span style="color: #008080;">&quot;, arrangement &quot;</span>,a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                             ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Prebinds</span><span style="color: #008000;">&#91;</span>CrtColumn<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span><span style="color: #808080;">//erase prebind;                                  </span>
                             CrtColumn<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000040;">--</span><span style="color: #008080;">;</span>
                             bypass<span style="color: #000080;">=</span><span style="color: #333399;">true</span><span style="color: #008080;">;</span>
                             <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
                            <span style="color: #008000;">&#125;</span> 
                         <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (CrtColumn[c,a]&gt;1)                            </span>
                       <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>bypass<span style="color: #000080;">==</span><span style="color: #333399;">false</span><span style="color: #008000;">&#41;</span><span style="color: #808080;">//meaning,if no negations are checked                          </span>
                         <span style="color: #008000;">&#123;</span>
                          <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventCount</span><span style="color: #000080;">==</span>CrtColumn<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #808080;">//all prebinds are done</span>
                            <span style="color: #008000;">&#123;</span>
                             <span style="color: #808080;">//checking time constraint again</span>
                             <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">GetTickCount</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">-</span>EventsQueue<span style="color: #008000;">&#91;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Prebinds</span><span style="color: #008000;">&#91;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventCount</span><span style="color: #000040;">-</span><span style="color: #008000;">1</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventTime</span><span style="color: #000080;">&lt;=</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">TimeConstraint</span><span style="color: #008000;">&#41;</span>
                               <span style="color: #008000;">&#123;</span>
                                <span style="color: #808080;">//before binding, will check if any of these events is previously binded to the same event</span>
                                any_binded<span style="color: #000080;">=</span><span style="color: #333399;">false</span><span style="color: #008080;">;</span>
                                <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> e<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>e<span style="color: #000080;">&lt;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventCount</span><span style="color: #008080;">;</span>e<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
                                   <span style="color: #008000;">&#123;</span>
                                    <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;Prebind&quot;</span>,ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Prebinds</span><span style="color: #008000;">&#91;</span>e<span style="color: #008000;">&#93;</span>,<span style="color: #008080;">&quot; bind location of complex event id &quot;</span>,ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ComplexID</span>,<span style="color: #008080;">&quot; : &quot;</span>,FindBind<span style="color: #008000;">&#40;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ComplexID</span>,EventsQueue<span style="color: #008000;">&#91;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Prebinds</span><span style="color: #008000;">&#91;</span>e<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                                    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>FindBind<span style="color: #008000;">&#40;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ComplexID</span>,EventsQueue<span style="color: #008000;">&#91;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Prebinds</span><span style="color: #008000;">&#91;</span>e<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span>1<span style="color: #008000;">&#41;</span>
                                      <span style="color: #008000;">&#123;</span>
                                       any_binded<span style="color: #000080;">=</span><span style="color: #333399;">true</span><span style="color: #008080;">;</span>
                                       <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;One event is already binded to complex event &quot;</span>,ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ComplexID</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                                       <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
                                      <span style="color: #008000;">&#125;</span>
                                   <span style="color: #008000;">&#125;</span>
                                <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>any_binded<span style="color: #000080;">==</span><span style="color: #333399;">false</span><span style="color: #008000;">&#41;</span>
                                  <span style="color: #008000;">&#123;</span>
                                   <span style="color: #808080;">//binding event</span>
                                   <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> e<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>e<span style="color: #000080;">&lt;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventCount</span><span style="color: #008080;">;</span>e<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
                                      <span style="color: #008000;">&#123;</span>
                                       <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;Binding simple event on &quot;</span>,ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Prebinds</span><span style="color: #008000;">&#91;</span>e<span style="color: #008000;">&#93;</span>,<span style="color: #008080;">&quot; to &quot;</span>,ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ComplexID</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                                       BindEvent<span style="color: #008000;">&#40;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ComplexID</span>,EventsQueue<span style="color: #008000;">&#91;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Prebinds</span><span style="color: #008000;">&#91;</span>e<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                                      <span style="color: #008000;">&#125;</span>                       
                                   EventsCallback<span style="color: #008000;">&#40;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ComplexID</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #808080;">//raise complex event for user to handle                                   </span>
                                  <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (any_binded==false)                                </span>
                                <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span><span style="color: #808080;">//search exhausted for current arrangement of current complex event</span>
                                      <span style="color: #808080;">//it's either complete, so pointless to look forward</span>
                                      <span style="color: #808080;">//or one of the simple events is binded to the same complex event, again pointless</span>
                               <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (GetTickCount()-EventsQueue[ComplexEventsTable[c].ArrangementArray[a].Prebinds[...]].EventTime&lt;=ComplexEventsTable[c].TimeConstraint)</span>
                             else<span style="color: #808080;">//it's a flop: completed too late; deleting binds</span>
                               <span style="color: #008000;">&#123;</span>                                      
                                <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> f<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>f<span style="color: #000080;">&lt;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventCount</span><span style="color: #008080;">;</span>f<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
                                   <span style="color: #008000;">&#123;</span>
                                    <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;Unbinding simple event from &quot;</span>,ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Prebinds</span><span style="color: #008000;">&#91;</span>f<span style="color: #008000;">&#93;</span>,<span style="color: #008080;">&quot; to &quot;</span>,ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ComplexID</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                                    UnbindEvent<span style="color: #008000;">&#40;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ComplexID</span>,EventsQueue<span style="color: #008000;">&#91;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Prebinds</span><span style="color: #008000;">&#91;</span>f<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                                    ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Prebinds</span><span style="color: #008000;">&#91;</span>f<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>
                                    ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">NegationsChecked</span><span style="color: #008000;">&#91;</span>f<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #333399;">false</span><span style="color: #008080;">;</span>
                                   <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (int f=0;f&lt;ComplexEventsTable[c].ArrangementsArray[a].EventCount;f++)</span>
                                 <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span><span style="color: #808080;">//no point to look forward , time`s up already</span>
                               <span style="color: #008000;">&#125;</span><span style="color: #808080;">//else if (GetTickCount()-EventsQueue[ComplexEventsTable[c].ArrangementArray[a].Prebinds[...]].EventTime&lt;=ComplexEventsTable[c].TimeConstraint)</span>
                            <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (ComplexEventsTable[c].ArrangementsArray[a].EventCount==CrtColumn[c][a])</span>
                         <span style="color: #008000;">&#125;</span><span style="color: #808080;">//else if (bypass==true)                                                                                                 </span>
                      <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (EventsQueue[p].EventID==ComplexEventsTable[c].ArrangementsArray[a].EventArray[CrtColumn[c,a]])</span>
                    p<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
                   <span style="color: #008000;">&#125;</span><span style="color: #808080;">//while (time-EventsQueue[p].EventTime&lt;=ComplexEventsTable[c].TimeConstraint)</span>
                <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (int a=0;a&lt;ComplexEventsTable[c].ArrangementsCount;a++)</span>
            <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (ComplexEventsTable[c].ArrangementsCount!=0)</span>
         <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (int c=0;c&lt;ComplexEventsCount;c++)       </span>
&nbsp;
      <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> c<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>c<span style="color: #000080;">&lt;</span>ComplexEventsCount<span style="color: #008080;">;</span>c<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
         <span style="color: #008000;">&#123;</span>          
          <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsCount</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>0<span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
             <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>a<span style="color: #000080;">&lt;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsCount</span><span style="color: #008080;">;</span>a<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
                <span style="color: #008000;">&#123;</span>                     
                 <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventCount</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>0<span style="color: #008000;">&#41;</span>
                   <span style="color: #008000;">&#123;</span> 
                    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>CrtColumn<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span><span style="color: #000080;">&lt;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventCount</span><span style="color: #008000;">&#41;</span>
                      <span style="color: #008000;">&#123;</span>
                       <span style="color: #808080;">//removing prebinds</span>
                       <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> f<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>f<span style="color: #000080;">&lt;</span>ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">EventCount</span><span style="color: #008080;">;</span>f<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
                          <span style="color: #008000;">&#123;</span>
                           ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">Prebinds</span><span style="color: #008000;">&#91;</span>f<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>
                           ComplexEventsTable<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">ArrangementsArray</span><span style="color: #008000;">&#91;</span>a<span style="color: #008000;">&#93;</span>.<span style="color: #007788;">NegationsChecked</span><span style="color: #008000;">&#91;</span>f<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #333399;">false</span><span style="color: #008080;">;</span>
                          <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (int f=0;f&lt;ComplexEventsTable[c].ArrangementsArray[a].EventCount;f++)                         </span>
                      <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (CrtColumn[c][a]&lt;ComplexEventsTable[c].ArrangementsArray[a].EventCount)</span>
                   <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (ComplexEventsTable[c].ArrangementsArray[a].EventCount!=0)                       </span>
                <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (int a=0;a&lt;ComplexEventsTable[c].ArrangementsCount;a++)</span>
            <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (ComplexEventsTable[c].ArrangementsCount!=0)</span>
         <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (int c=0;c&lt;ComplexEventsCount;c++)          </span>
      <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
     <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Functia consta in doua cicluri. Primul este ciclul principal, liniile 13 &#8211; 117, iar al doilea ciclu este 120 &#8211; 140. Al doilea ciclu are un rol de curatare care va fi explicat mai jos.</p>
<p>Primul ciclu va trece prin ComplexEventsTable, ca sa vada care evenimente complexe apar. Pentru fiecare eveniment complex din tabela, aranjamentele vor fi verificate, si pentru fiecare aranjament, o serie de proceduri vor fi indeplinite.<br />
In interiorul acestui ciclu, alt ciclu va trece prin EventsQueue[], (liniile 23 &#8211; 115) de la primul la ultimul, uitandu-se dupa evenimente ce respecta constrangerea temporala a evenimentului complex curent. Una din cele mai importante variabile in acesta metoda este tabloul CrtColumn[]. Acesta stocheza pointerul curent (coloana curenta in tabloul unidimensional EventArray[]). Astfel, procedura verifica evenimentul simplu curent cerut de tabela cu cel gasit in coada (linia 26) , il preasociaza si incrementeaza valoarea CrtColumn[] pentru aranjamentul curent al evenimentului complex (liniile 29 &#8211; 31). Deoarece CrtColumn[] este intializat cu zerouri, daca gaseste primul eveniment, ajunge la 1. Acum, daca CrtColumn[] e mai mare decat 1 (insemnand ca al doilea eveniment a fost gasit, si se pregateste pentru al treilea) este necesar sa verifice daca intre evenimentele precedente (adica primul si al doilea, in acest caz) exista evenimente de negatie (acelea care sunt interzise de a aparea), numai daca NegationsCount[] pentru acel eveniment simplu specific este nonzero (liniile 40 &#8211; 59). Daca un eveniment de negatie apare, se va intrerupe cautarea &#8211; nu mai are sens, caci aranjamentul curent nu mai poate aparea. De asemenea seteaza variabila bypass la true, pentru ca partea de cod ce urmeaza, care e totusi doar o tehnica de programare pentru a face listingul sa arate mai bine &#8211; acest cod va fi executat daca nu apar negatii intre timp. Din moment ce tabloul de evenimente este bazat pe zero, evenimentul maxim care poate fi asociat este EventCount-1, si, daca CrtColumn[] pentru aranjamentul curent este egal cu EventCount, atunci toate evenimentele au fost preasociate. Evenimentul complex este aproape gata. Ceea ce urmeaza se intampla numai daca cel mai vechi eveniment inca verifica constrangerea temporala. Va verifica daca cel putin unul din evenimentele pre-asociate in aceasta trecere a fost deja asociat definitiv evenimentului complex analizat. In acest caz, va ridica true pentru steguletul any_binded, si va intrerupe. Daca steguletul nu e ridicat, atunci evenimentul complex este completat in acest aranjament, evenimentele simple sunt asociate evenimentului complex, EventsCallback() este apelata pentru a-l notifica pe utilizator, si cautarea completa este intrerupta (liniile 90-96). Altfel pre-asocierea este anulata &#8211; s-a intamplat prea tarziu. Evenimentele sunt dezasociate, negatiile si pre-asocierile sterse, cautarea este intrerupta &#8211; nu mai are sens caci e prea tarziu deja.</p>
<p>Apoi vine al doilea ciclu, liniile 121 &#8211; 141. Intrucat evenimentele sunt mapate de la cel mai apropiat la cel mai vehci, ele sunt raportate utilizatorului , creand evenimente complexe incomplete a caror &#8220;umbra&#8221; se manifesta in viitor oprind acelasi eveniment de la raportare, daca ar aparea din nou, dar fiind construit din alte evenimente simple. Toate pre-asocierile sunt eliminate, numai asocierile definitive ramanand valide. De notat, totusi, ca acelasi eveniment complex, conceptual, poate fi anuntat de mai mult decat o singura daca, de aranjamente diferite, daca acestea contin siruri de evenimente simple complet diferite (de exemplu 15 si 16 sau 11 si 10 , daca toate apar, insemnand acelasi eveniment, vor fi raportate amandoua aranjamentele ca fiind evenimente complexe cu acelasi ID, dar distincte), pentru ca motorul nu poate sti ca evenimentul a mai aparut si acestea inseamna acelasi lucru.</p>
<p>Poti intreba despre negatii, caci vezi ca negatiile sunt specifice evenimentelor, fiecare eveniment avand propriile sale evenimente de negatie intre el si evenimentul precedent. Motorul curent nu suporta negatii globale. Totusi, daca vrei ca anumite evenimente sa fie negatii globale, acestea trebuie sa fie setate intre fiecare doua evenimente simple consecutive. Primul eveniment din sir poate avea negatii asociate, dar acestea nu vor fi verificate, pentru ca nu exista un orizont temporal pentru a fi verificate. Negatiile sunt valide numai intre evenimente simple consecutive.</p>
<p>Acesta este un exemplu de script care foloseste motorul CEP intr-un test. Testul consta in transmiterea de evenimente abstracte catre motorul CEP. Sa-l numim <strong>ceptest.mq5</strong> .</p>

<div class="wp_codebox"><table width="100%" ><tr id="p155188"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
</pre></td><td class="code" id="p1551code88"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//|                                                      ceptest.mq5 |</span>
<span style="color: #808080;">//|                                        Copyright Bogdan Caramalac|</span>
<span style="color: #808080;">//|                                           http://mqlmagazine.com |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #339900;">#property copyright &quot;Copyright 2010, MetaQuotes Software Corp.&quot;</span>
<span style="color: #339900;">#property link      &quot;http://www.mql5.com&quot;</span>
<span style="color: #339900;">#property version   &quot;1.00&quot;</span>
&nbsp;
<span style="color: #339900;">#include &lt;CEPEngine.mqh&gt;</span>
&nbsp;
&nbsp;
<span style="color: #808080;">//our class: we needed it to override EventsCallback;</span>
<span style="color: #0000ff;">class</span> LocalCEPEngine <span style="color: #008080;">:</span> <span style="color: #0000ff;">public</span> CEPEngine
  <span style="color: #008000;">&#123;</span> 
    <span style="color: #0000ff;">void</span> EventsCallback<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">uint</span> EventID<span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;COMPLEX EVENT RECOGNIZED: &quot;</span>,EventID<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
     <span style="color: #008000;">&#125;</span>   
  <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #808080;">//the CEP engine object</span>
LocalCEPEngine myengine<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//| Script program start function                                    |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #0000ff;">void</span> OnStart<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">uint</span> tickstart,tick<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">ulong</span> AbstractEvent<span style="color: #008080;">;</span>
   ComplexEvent c<span style="color: #008080;">;</span>
   <span style="color: #808080;">//setting up engine time span</span>
   myengine.<span style="color: #007788;">SetupEngineMilliseconds</span><span style="color: #008000;">&#40;</span>10000<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #808080;">//creating complex events</span>
   MakeComplexEvent<span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;10 !6 11 ; 10 12 13 ; 10 13 12&quot;</span>,1111,2000,c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #808080;">//the event for MSFT;  </span>
   myengine.<span style="color: #007788;">AddComplexEvent</span><span style="color: #008000;">&#40;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>   
   <span style="color: #808080;">//note the events with ! are negations</span>
   MakeComplexEvent<span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;5 !7 15 ; 5 !7 16 17 ; 5 !7 17 !7 !9 16&quot;</span>,2222,3000,c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #808080;">//the event for ^GSPC;</span>
   myengine.<span style="color: #007788;">AddComplexEvent</span><span style="color: #008000;">&#40;</span>c<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> 
&nbsp;
   tickstart<span style="color: #000080;">=</span><span style="color: #8a2be2;">GetTickCount</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   tick<span style="color: #000080;">=</span>tickstart<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #808080;">//alternate tests:</span>
   myengine.<span style="color: #007788;">RaiseEvent</span><span style="color: #008000;">&#40;</span>10<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>   
   <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;*****************************************************************************************************************&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   myengine.<span style="color: #007788;">RaiseEvent</span><span style="color: #008000;">&#40;</span>6<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>   
   <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;*****************************************************************************************************************&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>   
   myengine.<span style="color: #007788;">RaiseEvent</span><span style="color: #008000;">&#40;</span>11<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>   
   <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;*****************************************************************************************************************&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   myengine.<span style="color: #007788;">RaiseEvent</span><span style="color: #008000;">&#40;</span>10<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;*****************************************************************************************************************&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   myengine.<span style="color: #007788;">RaiseEvent</span><span style="color: #008000;">&#40;</span>11<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>   
   <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;*****************************************************************************************************************&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Aceasta de exemplu genereaza urmatoarea iesire:</p>
<p><a href="http://mqlmagazine.com/ro/programarea-in-mql/mql5-implementarea-unui-motor-cep-simplu/attachment/cep-engine-running/" rel="attachment wp-att-1550"><img src="http://mqlmagazine.com/ro/wp-content/uploads/2010/05/CEP-engine-running.jpg" alt="" title="CEP engine running" width="971" height="775" class="alignnone size-full wp-image-1550" /></a></p>
<p>Te invit sa verifici logurile, pentru a vedea cum functioneaza sistemul. Incearca alte teste:<br />
Like this:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p155189"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p1551code89"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//alternate tests:</span>
   myengine.<span style="color: #007788;">RaiseEvent</span><span style="color: #008000;">&#40;</span>10<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>   
   <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;*****************************************************************************************************************&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   myengine.<span style="color: #007788;">RaiseEvent</span><span style="color: #008000;">&#40;</span>11<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;*****************************************************************************************************************&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Sau asa:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p155190"><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code" id="p1551code90"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//alternate tests:</span>
   myengine.<span style="color: #007788;">RaiseEvent</span><span style="color: #008000;">&#40;</span>10<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>   
   <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;*****************************************************************************************************************&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   myengine.<span style="color: #007788;">RaiseEvent</span><span style="color: #008000;">&#40;</span>6<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>   
   <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;*****************************************************************************************************************&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>   
   myengine.<span style="color: #007788;">RaiseEvent</span><span style="color: #008000;">&#40;</span>11<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>   
   <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;*****************************************************************************************************************&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Sau asa:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p155191"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code" id="p1551code91"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//alternate tests:</span>
   myengine.<span style="color: #007788;">RaiseEvent</span><span style="color: #008000;">&#40;</span>10<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>   
   <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;*****************************************************************************************************************&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   myengine.<span style="color: #007788;">RaiseEvent</span><span style="color: #008000;">&#40;</span>11<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>   
   <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;*****************************************************************************************************************&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   myengine.<span style="color: #007788;">RaiseEvent</span><span style="color: #008000;">&#40;</span>10<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;*****************************************************************************************************************&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Sau asa:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p155192"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code" id="p1551code92"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//alternate tests:</span>
   myengine.<span style="color: #007788;">RaiseEvent</span><span style="color: #008000;">&#40;</span>10<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>   
   <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;*****************************************************************************************************************&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   myengine.<span style="color: #007788;">RaiseEvent</span><span style="color: #008000;">&#40;</span>11<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>   
   <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;*****************************************************************************************************************&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   myengine.<span style="color: #007788;">RaiseEvent</span><span style="color: #008000;">&#40;</span>10<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;*****************************************************************************************************************&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   myengine.<span style="color: #007788;">RaiseEvent</span><span style="color: #008000;">&#40;</span>11<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>   
   <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;*****************************************************************************************************************&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Acum ma vei intreba cum poti afla care sunt combinatiile de evenimente simple care sa fie legate ca evenimente complexe. Care evenimente complexe stau la baza algoritmilor de frecventa medie? Cum se pot cauta? </p>
<p>Ei bine, nu am absolvit CQF-ul lui Paul Wilmott. Nu-ti pot spune asta. Sunt un simplu absolvent de finante din Romania, probabil urmand sa fiu prajit in mizeria ce sta sa vina in sectorul public in care din pacate lucrez. Am dat doar o sugestie <strong>minora</strong> despre mecanica acestei cautari in articolul despre sistemele cu reglare automata. Daca ai creierii si puterea de a merge mai departe, si de crezi in valoarea de fata a lucrurilor, corectitudinea educatiei si alte chestii blah blah &#8211; incearca sa-ti faci un master in Finante Computationale &#8211; sau in Finante Cantitative &#8211; ar trebui sa fie de-ajuns. Daca nu poti sa-ti finantezi unul, incearca Finlanda. Mi se pare ca <a title="Hanken" href="http://www.hanken.fi/public/en/compfin" target="_top">Hanken</a> e o solutie destul de cinstita &#8211; daca ai nervii de a trece prin hartii si intrebari. Altfel, studiaza singur si implementeaza acasa &#8211; cu toate limitele decurgand de aici!</p>
<p>Linkuri:<br />
<a title="CEPEngine.mqh" href="http://mqlmagazine.com/wp-content/uploads/editions/may2010/CEPEngine.mqh" target="_top">CEPEngine.mqh</a><br />
<a title="ceptest.mq5" href="http://mqlmagazine.com/wp-content/uploads/editions/may2010/ceptest.mq5" target="_top">ceptest.mq5</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mqlmagazine.com/ro/programarea-in-mql/mql5-implementarea-unui-motor-cep-simplu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Combinatorica in MQL5</title>
		<link>http://mqlmagazine.com/ro/programarea-in-mql/combinatorica-in-mql5/</link>
		<comments>http://mqlmagazine.com/ro/programarea-in-mql/combinatorica-in-mql5/#comments</comments>
		<pubDate>Mon, 24 May 2010 21:36:07 +0000</pubDate>
		<dc:creator>Bogdan Caramalac, MQLmagazine sr.editor</dc:creator>
				<category><![CDATA[Programarea in MQL]]></category>

		<guid isPermaLink="false">http://mqlmagazine.com/ro/?p=1578</guid>
		<description><![CDATA[[English version] [MQLmagazine.com in english] [Editia romaneasca]
Cu mult timp in urma am scris pe fostul meu blog despre generarea permutarilor, dar nu m-am scufundat destul de mult in explicarea algoritmului si a codului. Intr-adevar, exista situatii cand combinatorica trebuie sa fie aplicata &#8211; cand cautam arbitraje sau pentru statistici care au ca cerinta selectia activelor.
Permutari
Permutarile [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mqlmagazine.com/mql-programming/combinatorics-in-mql5" target="_top">[English version]</a> <a title="[MQLmagazine.com in english]" href="http://mqlmagazine.com" target="_top">[MQLmagazine.com in english]</a> <a title="[Editia romaneasca]" href="http://mqlmagazine.com/ro" target="_top">[Editia romaneasca]</a></p>
<p>Cu mult timp in urma am scris pe fostul meu blog despre generarea permutarilor, dar nu m-am scufundat destul de mult in explicarea algoritmului si a codului. Intr-adevar, exista situatii cand combinatorica trebuie sa fie aplicata &#8211; cand cautam arbitraje sau pentru statistici care au ca cerinta selectia activelor.</p>
<p><strong>Permutari</strong></p>
<p>Permutarile sunt destul de simplu de gasit si de generat, desi manualele de matematica sar peste acesti algoritmi. Daca permutarile sunt <strong>ordine specifice</strong> in care elementele unei multimi sunt aranjate, aceasta inseamna ca in timp ce aranjam elementele, posibilitatile de a aranja elementele ramase se reduc. Daca avem 4 elemente intr-o multime, dupa ce-l asezam pe primul mai ramand doar 3 locuri disponibile, si asa mai departe pana cand ultimul element se aseaza automat in singurul loc liber ramas. De aceea, compozitia numarului care da permutarea se face ca la compuneerea unui numar intr-o alta baza de numeratie, cu diferenta ca baza de numeratie se micsoreaza la fiecare pas.</p>
<p>De exemplu avem de gasit numarul urmatoarei permutari:</p>
<p>|1|2|3|4|<br />
|1|4|2|3|</p>
<p>La inceput, baza de numeratie este 4, iar tabloul nostru este gol:</p>
<p>|1|2|3|4| : notatia matematica a pozitiilor<br />
|1|4|2|3| : permutarea de descifrat</p>
<p>|0|0|0|0| : locuri ocupate in notatia pozitiilor, in prezent<br />
|0|1|2|3| : locuri in tablou (de la zero)<br />
|0|1|2|3| : tablou de numarare</p>
<p>Ne uitam la prima pozitie, 1, si citim primul element, &#8220;1&#8243;. Din ratiuni de computing folosim tablouri bazate pe zero.<br />
Numarul permutarii = 1-1 = 0</p>
<p>|1|2|3|4| : notatia matematica a pozitiilor<br />
|1|4|2|3| : permutarea de descifrat</p>
<p>|0|0|0|0| : locuri ocupate in notatia pozitiilor, in prezent<br />
|1|0|0|0| : locuri ocupate in notatia pozitiilor dupa inserare<br />
|0|1|2|3| : tabloul de numarare (conceptual, doar pentru numarare)<br />
|x|0|1|2| : noul tablou de numarare pentru elementele ramase.</p>
<p>Acum ne uitam la al doilea element. Al doilea element este &#8220;4&#8243;. Acum, pentru ca mai avem doar 3 locuri libere, baza de numeratie este 3. Numarul permutarii = (0 x 3) = 0. La aceasta, adaugam pozitia in tabloul de numarare pentru elementul &#8220;4&#8243;, care este 2 : Numarul permutarii = 0 + 2 = 2</p>
<p>|1|2|3|4| : notatia matematica a pozitiilor<br />
|1|4|2|3| : permutarea de descifrat</p>
<p>|1|0|0|0| : locuri ocupate in notatia pozitiilor, in prezent<br />
|1|0|0|4| : locuri ocupate in notatia pozitiilor, dupa inserare<br />
|x|0|1|2| : tabloul de numarare<br />
|x|0|1|x| : noul tablou de numarare pentru elementele ramase</p>
<p>Acum ne uitam la al treilea element. Al treilea element este &#8220;2&#8243;. Acum cand avem 2 locuri libere, baza de numeratie este 2.<br />
Numarul de permutare = (2 x 2) = 4. La acesta, adaugam pozitia in tabloul de numarare pentru elementul &#8220;2&#8243;, care este 0 : Numarul de permutare = 4 + 0 = 4</p>
<p>|1|2|3|4| : notatia matematica a pozitiilor<br />
|1|4|2|3| : permutarea de descifrat</p>
<p>|1|0|0|4| : locuri ocupate in notatia pozitiilor, in prezent<br />
|1|2|0|4| : locuri ocupate in notatia pozitiilor, dupa inserare<br />
|x|0|1|2| : tablou de numarare<br />
|x|x|0|x| : noul tablou de numarare pentru elementele ramase.</p>
<p>Calculul se opreste. Avem de inserat numai n-1 elemente. Al n-lea element este prezumat a se afla in locul ramas liber.</p>
<p>Numarul de permutare final = 4</p>
<p>Algoritmul invers, <strong>de generare a permutarilor din numerele de permutare</strong>, este urmatorul:<br />
Incepand de la baza 2, efectuam n-1 pasi de divizune la o baza in crestere, pastrand restul.<br />
Astfel avem<br />
4 / 2 = [2], remainder 0<br />
[2] / 3 = 0, remainder 2<br />
[0] / 4 = 0, remainder 0</p>
<p>Apoi incepem sa construim permutarea la loc. Citim ultimul rest, pe care il gasim a fi 0. Aceasta inseamna ca primul element este intr-adevar &#8220;1&#8243;, pentru ca 0 din tabloul de numarare este 1 in tabloul pozitiilor.</p>
<p>|1|2|3|4| : notatia matematica a pozitiilor<br />
|0|1|2|3| : subscripturi fizice in variabila tablou<br />
|0|1|2|3| : tablou de numarare<br />
|1|0|0|0| : pozitii ocupate dupa inserarea elementului curent<br />
|x|0|1|2| : tablou de numarare dupa inserarea elementului curent<br />
|1|0|0|0| : permutarea construita</p>
<p>Baza s-a micsorat la 3, pentru ca mai avem 3 locuri ramase. Citim restul urmator, in ordine inversa, si gasim ca este 2. Uitandu-ne in noul tabloul de numarare, vedem ca pozitia 2 corespunde elementului &#8220;4&#8243; din notatia matematica.</p>
<p>|1|2|3|4| : notatia matematica a pozitiilor<br />
|0|1|2|3| : subscripturi fizice in variabila tablou<br />
|x|0|1|2| : tablou de numarare<br />
|1|0|0|4| : pozitii ocupate dupa inserarea elementului curent<br />
|x|0|1|x| : tablou de numarare dupa inserarea elementului curent<br />
|1|0|0|4| : permutarea construita</p>
<p>Baza s-a micsorat la 2, caci mai avem 2 locuri libere. Citim restul urmator, in ordine inversa, si gasim ca este 0. Uitandu-ne in noul tablou de numarare, vedem ca pozitia 0 corespunde elementului &#8220;2&#8243; din notatia matematica.</p>
<p>|1|2|3|4| : notatia matematica a pozitiilor<br />
|0|1|2|3| : subscripturi fizice in variabila tablou<br />
|x|0|1|x| : tablou de numarare<br />
|1|2|0|4| : pozitii ocupate dupa inserarea elementului curent<br />
|x|x|0|x| : tablou de numarare dupa inserarea elementului curent<br />
|1|4|0|2| : permutarea construita</p>
<p>Mai avem un singur element de determinat, si acesta este &#8220;3&#8243;, pe singurul loc ramas neocupat.</p>
<p>|1|2|3|4| : notatia matematica a pozitiilor<br />
|0|1|2|3| : subscripturi fizice in variabila tablou<br />
|x|x|0|x| : tablou de numarare<br />
|1|2|3|4| : pozitii ocupate dupa inserarea elementului curent<br />
|x|x|x|x| : tablou de numarare dupa inserarea elementului curent<br />
|1|4|3|2| : permutarea construita</p>
<p>Pentru ca ambii algoritmi sunt liniari, ei poti fi implementati direct in functii. Astfel, incepem sa scriem <strong>Combinatorics.mqh</strong>.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p157898"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
</pre></td><td class="code" id="p1578code98"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//|                                                Combinatorics.mqh |</span>
<span style="color: #808080;">//|                                       Copyright Bogdan Caramalac |</span>
<span style="color: #808080;">//|                                           http://mqlmagazine.com |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #339900;">#property copyright &quot;Copyright Bogdan Caramalac&quot;</span>
<span style="color: #339900;">#property link      &quot;http://mqlmagazine.com&quot;</span>
&nbsp;
<span style="color: #808080;">//*************************************************</span>
&nbsp;
 <span style="color: #0000ff;">string</span> Replicate<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">string</span> s, <span style="color: #0000ff;">int</span> count<span style="color: #008000;">&#41;</span>
   <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">string</span> res<span style="color: #000080;">=</span><span style="color: #008080;">&quot;&quot;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>count<span style="color: #000080;">&lt;=</span>0<span style="color: #008000;">&#41;</span>
      <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>res<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>count<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
      <span style="color: #8a2be2;">StringConcatenate</span><span style="color: #008000;">&#40;</span>res,res,s<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>res<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #008000;">&#125;</span>
&nbsp;
 <span style="color: #0000ff;">int</span> MathDiv<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> a,<span style="color: #0000ff;">int</span> b<span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
     <span style="color: #0000ff;">int</span> res<span style="color: #008080;">;</span>
     res<span style="color: #000080;">=</span>a<span style="color: #000040;">-</span><span style="color: #8a2be2;">MathRound</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">MathMod</span><span style="color: #008000;">&#40;</span>a,b<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
     res<span style="color: #000080;">=</span><span style="color: #8a2be2;">MathRound</span><span style="color: #008000;">&#40;</span>res<span style="color: #000040;">/</span>b<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
     <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>res<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
 <span style="color: #0000ff;">int</span> Round<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">double</span> a<span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
     <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">MathRound</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span>a,0<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #808080;">//*************************************************</span></pre></td></tr></table></div>

<p>Lucruri obisnuite pe care nu insistam, mergem mai departe spre Permutari:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p157899"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
</pre></td><td class="code" id="p1578code99"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//********************************************************************</span>
<span style="color: #808080;">//</span>
<span style="color: #808080;">//</span>
<span style="color: #808080;">//                             Permutations</span>
<span style="color: #808080;">//</span>
<span style="color: #808080;">//</span>
<span style="color: #808080;">//********************************************************************</span>
&nbsp;
 <span style="color: #0000ff;">long</span> Factorial<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">ushort</span> n<span style="color: #008000;">&#41;</span>
   <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">long</span> res<span style="color: #000080;">=</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">2</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>n<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
       res<span style="color: #000080;">=</span>res<span style="color: #000040;">*</span>i<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>res<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #008000;">&#125;</span>
&nbsp;
 <span style="color: #0000ff;">int</span> FindPermutation<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">ushort</span> elem, <span style="color: #0000ff;">int</span><span style="color: #000040;">&amp;</span> perm<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
     <span style="color: #0000ff;">int</span> res<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
     <span style="color: #0000ff;">int</span> rr<span style="color: #008080;">;</span>
     <span style="color: #0000ff;">int</span> positions<span style="color: #008000;">&#91;</span>30<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
     <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span><span style="color: #8a2be2;">ArrayRange</span><span style="color: #008000;">&#40;</span>positions,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
        positions<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>i<span style="color: #000040;">+</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>
     <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> e<span style="color: #000080;">=</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>e<span style="color: #000080;">&lt;</span>elem<span style="color: #008080;">;</span>e<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span><span style="color: #808080;">//we don`t look for the last element , there is one seat left</span>
        <span style="color: #008000;">&#123;</span>
         rr<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
         <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>elem<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
             <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>perm<span style="color: #008000;">&#91;</span>e<span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span>i<span style="color: #000040;">+</span>1<span style="color: #008000;">&#41;</span>
               <span style="color: #008000;">&#123;</span>
                res<span style="color: #000080;">=</span>res<span style="color: #000040;">+</span>rr<span style="color: #008080;">;</span><span style="color: #808080;">//has already -1, it`s zero-based</span>
                <span style="color: #808080;">//Print(&quot;Found element &quot;,perm[e-1],&quot; to be on perm[&quot;,i,&quot;]. Adding &quot;,rr, &quot; to res, equals &quot;,res);</span>
                <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>e<span style="color: #000040;">!</span><span style="color: #000080;">=</span>elem<span style="color: #000040;">-</span>1<span style="color: #008000;">&#41;</span>
                  res<span style="color: #000080;">=</span>res<span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>elem<span style="color: #000040;">-</span>e<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                <span style="color: #808080;">//Print(&quot;Multiplicating by elem-e (&quot;,elem-e,&quot;) = &quot;,res);                </span>
                positions<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>
               <span style="color: #008000;">&#125;</span>
             else
               <span style="color: #008000;">&#123;</span> <span style="color: #808080;">//if the searched element is not on current element,</span>
                 <span style="color: #808080;">//increment place counter only current position was not previously used;</span>
                <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>positions<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #000040;">-</span>1<span style="color: #008000;">&#41;</span>
                  rr<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
               <span style="color: #008000;">&#125;</span>
            <span style="color: #008000;">&#125;</span>
        <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (int e=1;i&lt;=elem;i++)</span>
      <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>res<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>  
    <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> GeneratePermutation<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> number,<span style="color: #0000ff;">int</span> elem,<span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>perm<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>    
    <span style="color: #0000ff;">string</span> elemallow<span style="color: #008080;">;</span> 
    <span style="color: #0000ff;">int</span> stoppoint,crtpoint<span style="color: #008080;">;</span>       
    <span style="color: #0000ff;">ushort</span> AscX<span style="color: #000080;">=</span><span style="color: #8a2be2;">StringGetCharacter</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;X&quot;</span>,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> i,j,base<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> nnow<span style="color: #008080;">;</span>
    elemallow<span style="color: #000080;">=</span>Replicate<span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;a&quot;</span>,20<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    base<span style="color: #000080;">=</span><span style="color: #008000;">2</span><span style="color: #008080;">;</span>    
    nnow<span style="color: #000080;">=</span>number<span style="color: #008080;">;</span>    
    <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span>elem<span style="color: #000040;">-</span><span style="color: #008000;">2</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&gt;=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000040;">--</span><span style="color: #008000;">&#41;</span>
       <span style="color: #008000;">&#123;</span>
       perm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>Round<span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">MathMod</span><span style="color: #008000;">&#40;</span>nnow,base<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>       
       nnow<span style="color: #000080;">=</span>MathDiv<span style="color: #008000;">&#40;</span>nnow,base<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       base<span style="color: #000080;">=</span>base<span style="color: #000040;">+</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>        
       <span style="color: #008000;">&#125;</span>
    perm<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>perm<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span><span style="color: #808080;">//because first element is from 1 to elem, not 0 to elem-1    </span>
    <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>elem<span style="color: #000040;">-</span><span style="color: #008000;">2</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
       <span style="color: #008000;">&#123;</span>
       <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">==</span>0<span style="color: #008000;">&#41;</span>
         <span style="color: #008000;">&#123;</span>
          <span style="color: #8a2be2;">StringSetCharacter</span><span style="color: #008000;">&#40;</span>elemallow,perm<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>1,AscX<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
         <span style="color: #008000;">&#125;</span>             
       else
          <span style="color: #008000;">&#123;</span>
          stoppoint<span style="color: #000080;">=</span>perm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>          
          crtpoint<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
          <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>j<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;</span>elem<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
             <span style="color: #008000;">&#123;</span>             
             <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">StringGetCharacter</span><span style="color: #008000;">&#40;</span>elemallow,j<span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span>AscX<span style="color: #008000;">&#41;</span>
                <span style="color: #0000ff;">continue</span><span style="color: #008080;">;</span>
             else
                <span style="color: #008000;">&#123;</span>
                crtpoint<span style="color: #000080;">=</span>crtpoint<span style="color: #000040;">+</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>
                <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>crtpoint<span style="color: #000080;">==</span>stoppoint<span style="color: #008000;">&#41;</span>
                   <span style="color: #008000;">&#123;</span>
                   perm<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>j<span style="color: #000040;">+</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span><span style="color: #808080;">//write new perm[i]</span>
                   <span style="color: #8a2be2;">StringSetCharacter</span><span style="color: #008000;">&#40;</span>elemallow,j,AscX<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
                   <span style="color: #008000;">&#125;</span>                   
                <span style="color: #008000;">&#125;</span>
             <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (j=0;j&lt;elem;j++);</span>
          <span style="color: #008000;">&#125;</span><span style="color: #808080;">//else if (i=0)    </span>
        <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (i=0;i&lt;elem-2;i++)</span>
    <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span>i<span style="color: #000080;">=</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>elem<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
       <span style="color: #008000;">&#123;</span>
       <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">StringGetCharacter</span><span style="color: #008000;">&#40;</span>elemallow,i<span style="color: #000040;">-</span>1<span style="color: #008000;">&#41;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>AscX<span style="color: #008000;">&#41;</span>
          <span style="color: #008000;">&#123;</span>          
          perm<span style="color: #008000;">&#91;</span>elem<span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>          
          <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
          <span style="color: #008000;">&#125;</span>
       <span style="color: #008000;">&#125;</span>        
    <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>  
    <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>De data asta am avut noroc. Doar doua functii simple de apelat. Nu va fi si cazul Combinarilor.</p>
<p><strong>Combinations</strong></p>
<p>Algoritmul de combunari este mult mai greu de inteles decat algoritmul de permutari. Cel mai folosit algoritm este cel care genereaza combinarile intr-o manevra recursiva.</p>
<p>Sa ne uitam la urmatoarea serie de combinari: C(5,3) </p>
<p>1, 2, 3<br />
1, 2, 4<br />
1, 2, 5<br />
1, 3, 4<br />
1, 3, 5<br />
1, 4, 5</p>
<p>Mai intai, fiecare element are un grad de libertate diferit. De exemplu, prmul nu poate fi dincolo de n-k+1.<br />
Alt lucru, dupa ce generezi prmul element, ceea ce ai de facut sunt C(n-1,k-1).<br />
De exemplu, C(4,2) sunt:</p>
<p>1, 2<br />
1, 3<br />
1, 4<br />
2, 3<br />
2, 4<br />
3, 4 </p>
<p>Pentru fiecare dintre acestea, C(3,1) sunt:</p>
<p>1<br />
2<br />
3</p>
<p>Acum poti vedea cum se integreaza:</p>
<p>Cand procedura este apelata pentru a genera C(5,3) incepe prina a enumera primul element, de la 1 la 3. Astfel, are:</p>
<p>1,(1+x)</p>
<p>Apoi se autoapeleaza pentru a genera C(4,2) , si enumereaza de la 1 la 2.</p>
<p>1,(1+1),(2+x)</p>
<p>In final se autoapeleaza pentru a genera C(3,1) si completeaza:</p>
<p>1,2,(2+1) = 1,2,3<br />
1,2,(2+2) = 1,2,4<br />
1,2,(2+3) = 1,2,5</p>
<p>Se intoarce la ciclul urmator si continua cu urmatorul element din C(4,2) si anume 2: </p>
<p>1,(1+2),(1+2+x)</p>
<p>Apeleaza apoi C(3,1) si completeaza:</p>
<p>1,3,4<br />
1,3,5</p>
<p>Se intoarce apoi la C(5,3) si continua sa enumereze urmatorul element, 2.</p>
<p>Algoritmul continua pana cand prima apelare incheie ciclul de enumerare.</p>
<p>Implementarea algoritmului e destul de intunecoasa. De aceasta data am optat pentru o clasa. Deoarece, daca generarea directa nu este posibila, nu e fezabil sa generezi combinatiile de fiecare data cand vrei o anumita combinatie, in cazul in care poti dori mai multe dintr-o lista. Asadar, e nevoie de o clasa, care aduce un loop interior de generare a combinatiilor in timp ce apeleaza o functie callback care sa-i dea utilizatorului combinatiile gasite, cu optiunea de terminare anticipata.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1578100"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
</pre></td><td class="code" id="p1578code100"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//********************************************************************</span>
<span style="color: #808080;">//</span>
<span style="color: #808080;">//</span>
<span style="color: #808080;">//                             Combinations</span>
<span style="color: #808080;">//</span>
<span style="color: #808080;">//</span>
<span style="color: #808080;">//********************************************************************</span>
&nbsp;
&nbsp;
<span style="color: #0000ff;">long</span> CombinationsTotal<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">ushort</span> n,<span style="color: #0000ff;">ushort</span> k<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>Factorial<span style="color: #008000;">&#40;</span>n<span style="color: #008000;">&#41;</span><span style="color: #000040;">/</span><span style="color: #008000;">&#40;</span>Factorial<span style="color: #008000;">&#40;</span>k<span style="color: #008000;">&#41;</span><span style="color: #000040;">*</span>Factorial<span style="color: #008000;">&#40;</span>n<span style="color: #000040;">-</span>k<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">class</span> CombinationObject
  <span style="color: #008000;">&#123;</span>   
   <span style="color: #0000ff;">protected</span><span style="color: #008080;">:</span> 
   <span style="color: #0000ff;">long</span> counter<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">ushort</span> n,k<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">bool</span> terminate<span style="color: #008080;">;</span>   
   <span style="color: #0000ff;">ushort</span> current_combination<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">private</span><span style="color: #008080;">:</span>
   <span style="color: #0000ff;">ushort</span> last_combination<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">bool</span> found<span style="color: #008080;">;</span>
&nbsp;
   <span style="color: #0000ff;">long</span> CombinationsTotal<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">ushort</span> n,<span style="color: #0000ff;">ushort</span> k<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">string</span> CombImage<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">ushort</span> <span style="color: #000040;">&amp;</span>ccomb<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span>,<span style="color: #0000ff;">ushort</span> n<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">void</span> GenCombinationsRec<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">ushort</span> depth,<span style="color: #0000ff;">ushort</span> nn,<span style="color: #0000ff;">ushort</span> kk<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
   <span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
   <span style="color: #0000ff;">void</span> SetupCombinationObject<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">ushort</span> nn,<span style="color: #0000ff;">ushort</span> kk<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> 
   <span style="color: #0000ff;">void</span> LoopCombinations<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">void</span> CombinationsCallback<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   CombinationObject<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>SetupCombinationObject<span style="color: #008000;">&#40;</span>6,3<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>   
  <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">void</span> CombinationObject<span style="color: #008080;">::</span><span style="color: #007788;">CombinationsCallback</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span>CombImage<span style="color: #008000;">&#40;</span>current_combination,k<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> CombinationObject<span style="color: #008080;">::</span><span style="color: #007788;">SetupCombinationObject</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">ushort</span> nn,<span style="color: #0000ff;">ushort</span> kk<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   n<span style="color: #000080;">=</span>nn<span style="color: #008080;">;</span>
   k<span style="color: #000080;">=</span>kk<span style="color: #008080;">;</span>
   terminate<span style="color: #000080;">=</span><span style="color: #333399;">false</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">ArrayInitialize</span><span style="color: #008000;">&#40;</span>current_combination,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">ArrayInitialize</span><span style="color: #008000;">&#40;</span>last_combination,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">ArrayResize</span><span style="color: #008000;">&#40;</span>current_combination,n<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">ArrayResize</span><span style="color: #008000;">&#40;</span>last_combination,n<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   counter<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">string</span> CombinationObject<span style="color: #008080;">::</span><span style="color: #007788;">CombImage</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">ushort</span> <span style="color: #000040;">&amp;</span>ccomb<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span>,<span style="color: #0000ff;">ushort</span> n<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">string</span> res<span style="color: #000080;">=</span><span style="color: #008080;">&quot;&quot;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>n<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
      res<span style="color: #000080;">=</span>res<span style="color: #000040;">+</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>ccomb<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>,<span style="color: #008000;">0</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span><span style="color: #008080;">&quot; &quot;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>res<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> CombinationObject<span style="color: #008080;">::</span><span style="color: #007788;">GenCombinationsRec</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">ushort</span> depth,<span style="color: #0000ff;">ushort</span> nn, <span style="color: #0000ff;">ushort</span> kk<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">bool</span> okay,r<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>terminate<span style="color: #000080;">==</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span>
     <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
&nbsp;
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>depth<span style="color: #000080;">==</span>k<span style="color: #008000;">&#41;</span>
     <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>  
&nbsp;
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>kk<span style="color: #000080;">==</span>0<span style="color: #008000;">&#41;</span>
     <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
&nbsp;
   <span style="color: #0000ff;">int</span> allows<span style="color: #000080;">=</span>nn<span style="color: #000040;">-</span>kk<span style="color: #000040;">+</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span> 
   <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">ushort</span> i<span style="color: #000080;">=</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>allows<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>
       <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>terminate<span style="color: #000080;">==</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span>
          <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
       <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>depth<span style="color: #000080;">==</span>0<span style="color: #008000;">&#41;</span>
         current_combination<span style="color: #008000;">&#91;</span>depth<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>
       else
         current_combination<span style="color: #008000;">&#91;</span>depth<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>current_combination<span style="color: #008000;">&#91;</span>depth<span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span>i<span style="color: #008080;">;</span>
&nbsp;
       GenCombinationsRec<span style="color: #008000;">&#40;</span>depth<span style="color: #000040;">+</span>1,nn<span style="color: #000040;">-</span>i,kk<span style="color: #000040;">-</span>1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
       okay<span style="color: #000080;">=</span><span style="color: #333399;">false</span><span style="color: #008080;">;</span><span style="color: #808080;">//checking for identical combination</span>
       <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> j<span style="color: #000080;">=</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>k<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
          <span style="color: #008000;">&#123;</span>
           <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>current_combination<span style="color: #008000;">&#91;</span>j<span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>last_combination<span style="color: #008000;">&#91;</span>j<span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
             okay<span style="color: #000080;">=</span><span style="color: #333399;">true</span><span style="color: #008080;">;</span><span style="color: #808080;">//okay, new one</span>
          <span style="color: #008000;">&#125;</span>
       <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>okay<span style="color: #000080;">==</span><span style="color: #333399;">false</span><span style="color: #008000;">&#41;</span>
         <span style="color: #0000ff;">continue</span><span style="color: #008080;">;</span>
       else
         <span style="color: #008000;">&#123;</span> <span style="color: #808080;">//copying current to last</span>
          <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> j<span style="color: #000080;">=</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>k<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
             last_combination<span style="color: #008000;">&#91;</span>j<span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>current_combination<span style="color: #008000;">&#91;</span>j<span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
         <span style="color: #008000;">&#125;</span>
&nbsp;
       CombinationsCallback<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>terminate<span style="color: #000080;">==</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span>
         <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>      
       counter<span style="color: #000080;">=</span>counter<span style="color: #000040;">+</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>
&nbsp;
      <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (int i=1;i&lt;=allows;i++)</span>
   <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> CombinationObject<span style="color: #008080;">::</span><span style="color: #007788;">LoopCombinations</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   GenCombinationsRec<span style="color: #008000;">&#40;</span>0,n,k<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Asta e o nuca mai greu de spart. Functia interesanta aici, motorul in sine, este GenCombinationsRec(). Parametrul depth spune functiei la ce nivel incepe generarea combinarilor. Cand depth este epuizat, adica la sfarsitul fiecarei cozi de apelare, o noua combinare este generata in current_combination[] si contorul este incrementat. Ceea ce are userul de facut, e sa mosteneasca aceasta clasa intr-o clasa proprie si sa supraincarce CombinationsCallback(). De asemenea, variabila terminate este disponibila, iar daca e setata la true, odata ce CombinationsCallback() termina, toate apelurile GenCombinationsRec() se vor incheia inainte de vreme si programul isi va relua executia.</p>
<p><strong>Arrangements</strong></p>
<p>Intrucat aranjamentele sunt <strong>combinatii permutate</strong>, nu e niciun rost de a complica problema. Clasa de aceasta data e aproape o copie a clasei CombinationObject, cu diferenta ca metoda recursiva aici, GenArrangementsRec(), este ca si GenCombinationsRec(), genereaza combinari, si apoi, cand fiecare dintre ele este gata, le permuteaza si serveste fiecare aranjament (combinatie permutata) catre ArrangementsCallback(). Simplu si convenabil, dar rezultatele nu sunt chiar in maniera sortata ca la Permutari si Combinari:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1578101"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
</pre></td><td class="code" id="p1578code101"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//********************************************************************</span>
<span style="color: #808080;">//</span>
<span style="color: #808080;">//</span>
<span style="color: #808080;">//                             Arrangements</span>
<span style="color: #808080;">//</span>
<span style="color: #808080;">//</span>
<span style="color: #808080;">//********************************************************************  </span>
&nbsp;
<span style="color: #0000ff;">long</span> ArrangementsTotal<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">ushort</span> n,<span style="color: #0000ff;">ushort</span> k<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>Factorial<span style="color: #008000;">&#40;</span>n<span style="color: #008000;">&#41;</span><span style="color: #000040;">/</span>Factorial<span style="color: #008000;">&#40;</span>n<span style="color: #000040;">-</span>k<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">class</span> ArrangementObject
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">protected</span><span style="color: #008080;">:</span> 
   <span style="color: #0000ff;">long</span> counter<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">ushort</span> n,k<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">ushort</span> current_arrangement<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">bool</span> terminate<span style="color: #008080;">;</span>  
   <span style="color: #0000ff;">private</span><span style="color: #008080;">:</span>
   <span style="color: #0000ff;">ushort</span> current_combination<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>  
   <span style="color: #0000ff;">ushort</span> last_combination<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>     
   <span style="color: #0000ff;">bool</span> found<span style="color: #008080;">;</span>
&nbsp;
   <span style="color: #0000ff;">long</span> ArrangementsTotal<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">ushort</span> n,<span style="color: #0000ff;">ushort</span> k<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">string</span> ArrgImage<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">ushort</span> <span style="color: #000040;">&amp;</span>ccomb<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span>,<span style="color: #0000ff;">ushort</span> n<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">void</span> GenArrangementsRec<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">ushort</span> depth,<span style="color: #0000ff;">ushort</span> nn,<span style="color: #0000ff;">ushort</span> kk<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
&nbsp;
   <span style="color: #0000ff;">public</span><span style="color: #008080;">:</span>
   <span style="color: #0000ff;">void</span> SetupArrangementObject<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">ushort</span> nn,<span style="color: #0000ff;">ushort</span> kk<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> 
   <span style="color: #0000ff;">void</span> LoopArrangements<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">void</span> ArrangementsCallback<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   ArrangementObject<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>SetupArrangementObject<span style="color: #008000;">&#40;</span>6,3<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>   
  <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #0000ff;">void</span> ArrangementObject<span style="color: #008080;">::</span><span style="color: #007788;">ArrangementsCallback</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span>ArrgImage<span style="color: #008000;">&#40;</span>current_arrangement,k<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> ArrangementObject<span style="color: #008080;">::</span><span style="color: #007788;">SetupArrangementObject</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">ushort</span> nn,<span style="color: #0000ff;">ushort</span> kk<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   n<span style="color: #000080;">=</span>nn<span style="color: #008080;">;</span>
   k<span style="color: #000080;">=</span>kk<span style="color: #008080;">;</span>
   terminate<span style="color: #000080;">=</span><span style="color: #333399;">false</span><span style="color: #008080;">;</span>   
   <span style="color: #8a2be2;">ArrayInitialize</span><span style="color: #008000;">&#40;</span>current_arrangement,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">ArrayInitialize</span><span style="color: #008000;">&#40;</span>current_combination,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">ArrayInitialize</span><span style="color: #008000;">&#40;</span>last_combination,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">ArrayResize</span><span style="color: #008000;">&#40;</span>current_combination,n<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">ArrayResize</span><span style="color: #008000;">&#40;</span>current_arrangement,n<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">ArrayResize</span><span style="color: #008000;">&#40;</span>last_combination,n<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>   
   counter<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
&nbsp;
&nbsp;
&nbsp;
<span style="color: #0000ff;">string</span> ArrangementObject<span style="color: #008080;">::</span><span style="color: #007788;">ArrgImage</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">ushort</span> <span style="color: #000040;">&amp;</span>ccomb<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span>,<span style="color: #0000ff;">ushort</span> n<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">string</span> res<span style="color: #000080;">=</span><span style="color: #008080;">&quot;&quot;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>n<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
      res<span style="color: #000080;">=</span>res<span style="color: #000040;">+</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>ccomb<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span>,<span style="color: #008000;">0</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span><span style="color: #008080;">&quot; &quot;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>res<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> ArrangementObject<span style="color: #008080;">::</span><span style="color: #007788;">GenArrangementsRec</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">ushort</span> depth,<span style="color: #0000ff;">ushort</span> nn, <span style="color: #0000ff;">ushort</span> kk<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">int</span> perm<span style="color: #008000;">&#91;</span>30<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">bool</span> okay,r<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>terminate<span style="color: #000080;">==</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span>
     <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
&nbsp;
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>depth<span style="color: #000080;">==</span>k<span style="color: #008000;">&#41;</span>
     <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>  
&nbsp;
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>kk<span style="color: #000080;">==</span>0<span style="color: #008000;">&#41;</span>
     <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
&nbsp;
   <span style="color: #0000ff;">int</span> allows<span style="color: #000080;">=</span>nn<span style="color: #000040;">-</span>kk<span style="color: #000040;">+</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span> 
   <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">ushort</span> i<span style="color: #000080;">=</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;=</span>allows<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>
       <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>terminate<span style="color: #000080;">==</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span>
          <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
       <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>depth<span style="color: #000080;">==</span>0<span style="color: #008000;">&#41;</span>
         current_combination<span style="color: #008000;">&#91;</span>depth<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>i<span style="color: #008080;">;</span>
       else
         current_combination<span style="color: #008000;">&#91;</span>depth<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>current_combination<span style="color: #008000;">&#91;</span>depth<span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span>i<span style="color: #008080;">;</span>
&nbsp;
       GenArrangementsRec<span style="color: #008000;">&#40;</span>depth<span style="color: #000040;">+</span>1,nn<span style="color: #000040;">-</span>i,kk<span style="color: #000040;">-</span>1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
       okay<span style="color: #000080;">=</span><span style="color: #333399;">false</span><span style="color: #008080;">;</span><span style="color: #808080;">//checking for identical combination</span>
       <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> j<span style="color: #000080;">=</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>k<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
          <span style="color: #008000;">&#123;</span>
           <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>current_combination<span style="color: #008000;">&#91;</span>j<span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span><span style="color: #000040;">!</span><span style="color: #000080;">=</span>last_combination<span style="color: #008000;">&#91;</span>j<span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
             okay<span style="color: #000080;">=</span><span style="color: #333399;">true</span><span style="color: #008080;">;</span><span style="color: #808080;">//okay, new one</span>
          <span style="color: #008000;">&#125;</span>
       <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>okay<span style="color: #000080;">==</span><span style="color: #333399;">false</span><span style="color: #008000;">&#41;</span>
         <span style="color: #0000ff;">continue</span><span style="color: #008080;">;</span>
       else
         <span style="color: #008000;">&#123;</span> <span style="color: #808080;">//copying current to last</span>
          <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> j<span style="color: #000080;">=</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>j<span style="color: #000080;">&lt;=</span>k<span style="color: #008080;">;</span>j<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
             last_combination<span style="color: #008000;">&#91;</span>j<span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>current_combination<span style="color: #008000;">&#91;</span>j<span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
         <span style="color: #008000;">&#125;</span>
&nbsp;
&nbsp;
       <span style="color: #808080;">//here combination is final and arrangements are generated       </span>
       <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> iperm<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>iperm<span style="color: #000080;">&lt;</span>Factorial<span style="color: #008000;">&#40;</span>k<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>iperm<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
          <span style="color: #008000;">&#123;</span>
           GeneratePermutation<span style="color: #008000;">&#40;</span>iperm,k,perm<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>           
           <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> jperm<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>jperm<span style="color: #000080;">&lt;</span>k<span style="color: #008080;">;</span>jperm<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
              <span style="color: #008000;">&#123;</span>
               current_arrangement<span style="color: #008000;">&#91;</span>jperm<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>current_combination<span style="color: #008000;">&#91;</span>perm<span style="color: #008000;">&#91;</span>jperm<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>                              
              <span style="color: #008000;">&#125;</span>                      
           ArrangementsCallback<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                        
           <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>terminate<span style="color: #000080;">==</span><span style="color: #333399;">true</span><span style="color: #008000;">&#41;</span>
             <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>      
           counter<span style="color: #000080;">=</span>counter<span style="color: #000040;">+</span><span style="color: #008000;">1</span><span style="color: #008080;">;</span>   
          <span style="color: #008000;">&#125;</span>   
&nbsp;
       <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (int i=1;i&lt;=allows;i++)</span>
   <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>                   
  <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> ArrangementObject<span style="color: #008080;">::</span><span style="color: #007788;">LoopArrangements</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   GenArrangementsRec<span style="color: #008000;">&#40;</span>0,n,k<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Si acum un script demonstrativ (<strong>combtest.mq5</strong>). Scriptul va afisa aranjamente de n perechi forex luate cate k, cu un k in crestere, de la 3 la n. Perechile forex sunt extrase la inceput, interogand fiecare instrument despre modul lui de calcul si retinand numai cele care raspund SYMBOL_CALC_MODE_FOREX, cu specificatia ca simbolul poate avea doar 6 sau mai multe litere (doua perechi forex si un sufix). Perechile sunt extrase si adaugate intr-un tablou. Apoi un motor customizat de aranjamente este apelat pentru a afisa aranjamentele:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1578102"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
</pre></td><td class="code" id="p1578code102"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//|                                                     combtest.mq5 |</span>
<span style="color: #808080;">//|                                       Copyright Bogdan Caramalac |</span>
<span style="color: #808080;">//|                                           http://mqlmagazine.com |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #339900;">#property copyright &quot;Copyright Bogdan Caramalac&quot;</span>
<span style="color: #339900;">#property link      &quot;http://mqlmagazine.com&quot;</span>
<span style="color: #339900;">#property version   &quot;1.00&quot;</span>
&nbsp;
&nbsp;
<span style="color: #339900;">#include &lt;Combinatorics.mqh&gt;</span>
&nbsp;
<span style="color: #0000ff;">int</span> CurrenciesCount<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> PairsCount<span style="color: #008080;">;</span>
<span style="color: #0000ff;">string</span> ForexPairs<span style="color: #008000;">&#91;</span>100<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #808080;">//our class: we needed it to override ArrangementsCallback;</span>
<span style="color: #0000ff;">class</span> LocalArrgClass <span style="color: #008080;">:</span> <span style="color: #0000ff;">public</span> ArrangementObject
  <span style="color: #008000;">&#123;</span> 
    <span style="color: #0000ff;">void</span> ArrangementsCallback<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      <span style="color: #0000ff;">string</span> image<span style="color: #000080;">=</span><span style="color: #008080;">&quot;&quot;</span><span style="color: #008080;">;</span>
      image<span style="color: #000080;">=</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>counter,<span style="color: #008000;">0</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span><span style="color: #008080;">&quot; :&quot;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>k<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>         
         image<span style="color: #000080;">=</span>image<span style="color: #000040;">+</span><span style="color: #008080;">&quot; &quot;</span><span style="color: #000040;">+</span>ForexPairs<span style="color: #008000;">&#91;</span>current_arrangement<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
      <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span>image<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>      
     <span style="color: #008000;">&#125;</span>   
  <span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #808080;">//the arrangment object</span>
LocalArrgClass myarrg<span style="color: #008080;">;</span>
&nbsp;
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//| Script program start function                                    |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
&nbsp;
<span style="color: #0000ff;">void</span> CheckAndAddPair<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">string</span> pair<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">bool</span> found<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>PairsCount<span style="color: #000080;">==</span>0<span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      ForexPairs<span style="color: #008000;">&#91;</span>PairsCount<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>pair<span style="color: #008080;">;</span>
      PairsCount<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
     <span style="color: #008000;">&#125;</span>
   else
     <span style="color: #008000;">&#123;</span>
      found<span style="color: #000080;">=</span><span style="color: #333399;">false</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>PairsCount<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
         <span style="color: #008000;">&#123;</span>
          <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ForexPairs<span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #000080;">==</span>pair<span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
             found<span style="color: #000080;">=</span><span style="color: #333399;">true</span><span style="color: #008080;">;</span>
             <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span>          
         <span style="color: #008000;">&#125;</span>
      <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>found<span style="color: #000080;">==</span><span style="color: #333399;">false</span><span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span>
         ForexPairs<span style="color: #008000;">&#91;</span>PairsCount<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>pair<span style="color: #008080;">;</span>
         PairsCount<span style="color: #000040;">++</span><span style="color: #008080;">;</span>               
        <span style="color: #008000;">&#125;</span> 
     <span style="color: #008000;">&#125;</span> 
   <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">void</span> OnStart<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>  
   <span style="color: #0000ff;">string</span> crtsymbol,pair1,pair2<span style="color: #008080;">;</span>
   CurrenciesCount<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
   PairsCount<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span><span style="color: #8a2be2;">SymbolsTotal</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">false</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>
       crtsymbol<span style="color: #000080;">=</span><span style="color: #8a2be2;">SymbolName</span><span style="color: #008000;">&#40;</span>i,<span style="color: #333399;">false</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
       <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span>crtsymbol,<span style="color: #333399;">SYMBOL_TRADE_CALC_MODE</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span><span style="color: #333399;">SYMBOL_CALC_MODE_FOREX</span><span style="color: #000040;">&amp;&amp;</span><span style="color: #8a2be2;">StringLen</span><span style="color: #008000;">&#40;</span>crtsymbol<span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;=</span>6<span style="color: #008000;">&#41;</span>
         <span style="color: #008000;">&#123;</span>          
          pair1<span style="color: #000080;">=</span><span style="color: #8a2be2;">StringSubstr</span><span style="color: #008000;">&#40;</span>crtsymbol,0,3<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>          
          CheckAndAddPair<span style="color: #008000;">&#40;</span>pair1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
          pair2<span style="color: #000080;">=</span><span style="color: #8a2be2;">StringSubstr</span><span style="color: #008000;">&#40;</span>crtsymbol,3,3<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>         
          CheckAndAddPair<span style="color: #008000;">&#40;</span>pair2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
         <span style="color: #008000;">&#125;</span>
      <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (int i=0;i&lt;SymbolsTotal(false);i++)        </span>
    <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> iarrg<span style="color: #000080;">=</span><span style="color: #008000;">3</span><span style="color: #008080;">;</span>iarrg<span style="color: #000080;">&lt;=</span>PairsCount<span style="color: #008080;">;</span>iarrg<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
       <span style="color: #008000;">&#123;</span>
        myarrg.<span style="color: #007788;">SetupArrangementObject</span><span style="color: #008000;">&#40;</span>PairsCount,iarrg<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
        myarrg.<span style="color: #007788;">LoopArrangements</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>      
       <span style="color: #008000;">&#125;</span>
  <span style="color: #008000;">&#125;</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span></pre></td></tr></table></div>

<p>Cam asa arata (desi trebuie oprit cu ajutorul lui terminate &#8211; altfel va sari o parte din jurnal):</p>
<p><a href="http://mqlmagazine.com/ro/?attachment_id=2065" rel="attachment wp-att-2065"><img src="http://mqlmagazine.com/wp-content/uploads/2010/05/Combinatorics-script-while-running.jpg" alt="" title="Combinatorics script while running" width="485" height="359" class="alignnone size-full wp-image-2065" /></a></p>
<p>Ai putea intreba de ce am optat pentru ca permutarile sa foloseasca <strong>int</strong> in loc de <strong>uint</strong> sau <strong>long</strong>. Raspunsul e problema legata de MathMod() si MathRound(). Aceste functii nu lucreaza cu tipuri intregi. Chiar daca asteapta si intorc <em>intregi ca si inteles</em> ele inca lucreaza cu <strong>double</strong> ca si tip. Asa ca toate convertirile trebuie sa se bazeze pe un cast fortat al unui double, care e un real cu semn, asa cum int e un intreg cu semn. Folosirea intregilor fara semn sau chiar long care se intinde pe 8 bytes in loc de 6 ca double ar fi complicat problema. Cred ca functiile trebuie sa fie refacute de MetaQuotes, pentru a lucra numai cu timpuri intregi si pentru a se <strong>supune</strong> tipurilor intregi primite care joaca rol de operanzi, tot asa cum <strong>div</strong> si <strong>mod</strong> lucreaza in implementarile Pascal. Iar in legatura cu <strong>MathRound()</strong>, aceasta trebuie sa fie o functie reala de rotunjire care intoarce un intreg conform tipului care asteapta rezultatul, sau intr-un tip intreg generic, cand e folosita in expresii.</p>
<p>Linkuri:<br />
<a title="Combinatorics.mqh" href="http://mqlmagazine.com/wp-content/uploads/editions/may2010/Combinatorics.mqh" target="_top">Combinatorics.mqh</a><br />
<a title="combtest.mq5" href="http://mqlmagazine.com/wp-content/uploads/editions/may2010/combtest.mq5" target="_top">combtest.mq5</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mqlmagazine.com/ro/programarea-in-mql/combinatorica-in-mql5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O metoda statistica pentru autoreglarea sistemelor de trading</title>
		<link>http://mqlmagazine.com/ro/modelare-financiara/o-metoda-statistica-pentru-autoreglarea-sistemelor-de-trading/</link>
		<comments>http://mqlmagazine.com/ro/modelare-financiara/o-metoda-statistica-pentru-autoreglarea-sistemelor-de-trading/#comments</comments>
		<pubDate>Mon, 24 May 2010 21:35:41 +0000</pubDate>
		<dc:creator>Bogdan Caramalac, MQLmagazine sr.editor</dc:creator>
				<category><![CDATA[Modelare financiara]]></category>

		<guid isPermaLink="false">http://mqlmagazine.com/ro/?p=1574</guid>
		<description><![CDATA[[English version] [MQLmagazine.com in english] [Editia romaneasca]
Incep sa scriu acest articol in ideea ca ar putea deveni folositor intr-un interval de timp nu prea indepartat. M-am gandit la asta de ceva vreme. Ideea de autoreglare a aparut de ceva vreme, dar complexitatea extrema a sistemelor de retail trading au facut-o imposibil de aplicat. Totusi, sistemele [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mqlmagazine.com/financial-modelling/a-statistical-method-for-self-tuning-trading-systems" target="_top">[English version]</a> <a title="[MQLmagazine.com in english]" href="http://mqlmagazine.com" target="_top">[MQLmagazine.com in english]</a> <a title="[Editia romaneasca]" href="http://mqlmagazine.com/ro" target="_top">[Editia romaneasca]</a></p>
<p>Incep sa scriu acest articol in ideea ca ar putea deveni folositor intr-un interval de timp nu prea indepartat. M-am gandit la asta de ceva vreme. Ideea de autoreglare a aparut de ceva vreme, dar complexitatea extrema a sistemelor de retail trading au facut-o imposibil de aplicat. Totusi, sistemele HFT sunt in general simple, si reguli similare sunt aplicate pe sute de titluri, intr-o maniera parametrizata. De aceea, daca regulile ar fi simple si ar putea fi scrise gen &#8220;<strong>cand</strong> apare asta, <strong>faci</strong> asta, <strong>rezultand</strong> asta&#8221;, in loc de logica de labirint a sistemelor de retail, atunci un set de statistici optime pe datele de intrare (intinzandu-se pe un tablou de cotatii, date de orderbook s.a.m.d.) este premisa pentru operatii gen cotare, primire de executii, take profit sau stop loss in doar cativa ticksi. Asa cum s-a vazut in articolul despre Progress Apama, acesti algoritmi sunt foarte instabili, fiind o continua cautare pentru algoritmi mai noi. </p>
<p>Acum poti intreba, de ce am incerca autoreglarea sistemelor de trading din moment ce institutionalii nu o fac (cel putin la nivelul HFT). Chestia e ca algoritmii lor sunt atat de rapizi incat <strong>pot sa nici nu aiba timp suficient de a inregistra datele in baza de date</strong>, incat autoreglarea, care necesita analiza suplimentara, ar fi o completa pierdere de timp, aducand prea putine imbunatatriri algoritmilor comparata cu latenta suplimentara care se formeaza. <strong>Ce va veni in aceste articole are de aceea o natura experimentala si nu trebuie luata ca solutie, ci ca incercare &#8211; nu pot spune sigur daca exista vreun sens in a incerca sa gasesti, cu statistici obisnuite, parametri recurenti ai unui proces stochastic.</strong></p>
<p>Asa ca, sa presupunem ca un tablou de parametri (cum ar fi volatilitati individuale, medii mobile, volume de executii) va fi inregistrat intr-o baza de date sau un tablou. Trebuie sa luam in considerare si faptul ca un semnal de trading poate exista permanent, la fiecare tick. Presupunand volumul a fi constant, acelasi semnal poate fi in doua directii : cumparare sau vanzare. Fiecare semnal poate avea doua rezultate, unul pentru cumparare, unul pentru vanzare. Putem crea totusi reguli separate pentru vanzare.</p>
<p>De exemplu, un semnal cuprinse de volatilitate si distanta dintre cotatia mediana si media mobila a cotatiei mediene este de : 0.03 stddev si 2 ticksi. Ca sa-l rasucim putin , introducem cotarea, si notam 0 pentru situatia fara executii. Pusa intr-un buy cu 3 ticksi take profit si 2 ticksi stop loss, la un anumit moment, face 2 ticksi profit, pusa intr-un sell, nu are executii. Deci bazei de date cu cumparari va fi adaugata inregistrarea (0.03 ; 2 ; 2), iar celei cu vanzari (0.03 ; 2 ; 0).</p>
<p>Si acum lucrurile devin interesante. La sfarsit, dupa ce datele sunt stranse pentru o masa de semnale care constituie &#8220;numarul mare&#8221; pentru statistici, ne uitam prin baza de date. Mai intai, la o prima privire vom grupa baza de date dupa actiune si rezultat. In acest caz, avem sase stari finale:</p>
<p>1. BUY: coteaza, executie, take profit (BQFT)<br />
2. BUY: coteaza, executie, stop loss (BQFS)<br />
3. BUY: coteaza, fara executie, anulare ordin (BQC)<br />
4. SELL: coteaza, executie, take profit (SQFT)<br />
5. SELL: coteaza, executie, stop loss (SQFS)<br />
6. SELL: coteaza, fara executie, anulare ordin (SQC)</p>
<p>Avem deci sase cazuri. Analizand BUY cu cotatie, executie si take profit, este doar una din cele sase stari si va consta intr-o parte mare a datelor, la fel ca si celelalte stari. Scopul analizei statistice e de a avea o statistica pregatita pentru fiecare caz. De exemplu, cazul nostru ar trebui sa arate, la sfarsit, cam asa:</p>
<p>0.03, 2 :  45% BQFT, 35% BQSL, 20% BQC ; 30% SQFT, 30% SQSL, 40% SQC</p>
<p>Dupa ce masa initiala de semnale impreuna cu rezultatele este colectata, statisticile trebuie sa fie lansate pentru fiecare combinatie de parametri. Avand numere reale ca parametri, cu multe zecimale, va conduce la faptul de a avea un numar mare de cazuri, egal cu numarul de semnale de input, facand statistica imposibila. Asa ca e nevoie de agregarea datelor. De exemplu, pentru fiecare set de parametri, pot fi calculate quartilele si apoi numarul de grupuri cu formula Freedman-Diaconis (e doar un exemplu, alte metode pot fi aplicate). Aceasta va conduce la un numar diferit de grupuri pentru fiecare dintre parametri. Apoi un nou tabel va fi creat, iar fiecare caz va avea o eticheta cu numarul de grupuri. De exemplu stddev 0.03 poate fi denumita ca &#8220;Grupul 1&#8243; pe scara stddev si cei 2 ticksi distanta pot fi &#8220;Grupul 2&#8243; pe scala distantelor in ticksi. Numarul total de cazuri poate fi mai mic sau egal decat produsul grupurilor per fiecare criteriu. Daca ai 3 criterii de 10 grupuri fiecare, pot fi si mai mult de 1000 de cazuri. Mai mult ca sigur, cazurile din miez vor avea un numar mare de situatii inregistrate, iar celelalte de-abia vor avea cate una. Totusi, cu cat mai platykurtica este repartitia situatiilor per cazuri, cu atat mai mare nevoia pentru un &#8220;numar mai mare&#8221; de situatii. Dupa aplicarea statisticilor, statistica bazei de date va arata cam asa:</p>
<p>Grupul 1, Grupul 2 :  45% BQFT, 35% BQSL, 20% BQC ; 30% SQFT, 30% SQSL, 40% SQC</p>
<p>Ce e important e ca trebuie sa fie extrase <strong>statistici relevante</strong>. Daca asa stau lucrurile, care ar fi decizia de trading? Mergi pe o cumparare cu o sansa de profit in 45% din cazuri? Numai ca sa suporti 35% stop losses&#8230; Pentru ca pe latura de vanzari e mult mai rau, cu situatii de stop loss aproape egale cu cele de profit. In acest caz, decizia este una de <strong>cumparare</strong>, dar totusi <strong>cu rezerve</strong>. Daca profiturile nu sunt destul de relevante, nicio decizie nu trebuie sa se ia. Totusi, <strong>este necesar ca algoritmul sa aiba un modul de decizii care sa aleaga numai cazurile relevante pentru trading.</strong>. Dar <strong>cat de rapida trebuie sa fie masina</strong>, intrucat dupa ce datele initiale sunt stranse, cu fiecare nou semnal (care poate fi si un tick, intr-un algoritm gen HFT) va fi lansata o masiva recalculare a marimilor grupurilor pe intreaga baza de date, <strong>pentru a aduce statistica la zi, si in acelasi timp de a veni cu decizia de trading si executia in timp real ?</strong></p>
<p><em>Amintiti-va articolul meu despre motorul CEP. CEP este vazut acolo ca un modul de recunoastere &#8211; lansare, dar daca CEP poate fi utilizat ca dispozitiv de inregistrare ? Daca CEP poate fi legat de motorul statistic? Cata latenta va adauga calculului? Mai putem vorbi de timp real?</em></p>
]]></content:encoded>
			<wfw:commentRss>http://mqlmagazine.com/ro/modelare-financiara/o-metoda-statistica-pentru-autoreglarea-sistemelor-de-trading/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Progress Apama : Cat de adanca e gaura de iepure a HFT ?</title>
		<link>http://mqlmagazine.com/ro/alte-platforme/progress-apama-cat-de-adanca-e-gaura-de-iepure-a-hft/</link>
		<comments>http://mqlmagazine.com/ro/alte-platforme/progress-apama-cat-de-adanca-e-gaura-de-iepure-a-hft/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 19:39:04 +0000</pubDate>
		<dc:creator>Bogdan Caramalac, MQLmagazine sr.editor</dc:creator>
				<category><![CDATA[Alte platforme]]></category>
		<category><![CDATA[apama]]></category>
		<category><![CDATA[hft]]></category>
		<category><![CDATA[platforma]]></category>
		<category><![CDATA[progress]]></category>
		<category><![CDATA[studio]]></category>

		<guid isPermaLink="false">http://mqlmagazine.com/ro/?p=1162</guid>
		<description><![CDATA[[English version] [MQLmagazine.com in english] [Editia romaneasca]
Luna aceasta, in timp ce asteptam noul Strategy Tester, m-am simtit destul de lipsit de idei. Am realizat ca ce incercam noi sa producem aici &#8220;se usuca&#8221;. Backtestul este crezul traderului, ceea ce-i da incredere in strategiile de trading pe care le incearca.
Pe la mijlocul lui martie am dat [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mqlmagazine.com/other-platforms/progress-apama-how-deep-does-hft-rabbit-hole-go/" target="_top">[English version]</a> <a title="[MQLmagazine.com in english]" href="http://mqlmagazine.com" target="_top">[MQLmagazine.com in english]</a> <a title="[Editia romaneasca]" href="http://mqlmagazine.com/ro" target="_top">[Editia romaneasca]</a></p>
<p>Luna aceasta, in timp ce asteptam noul Strategy Tester, m-am simtit destul de lipsit de idei. Am realizat ca ce incercam noi sa producem aici &#8220;se usuca&#8221;. Backtestul este <strong>crezul</strong> traderului, ceea ce-i da <strong>incredere</strong> in strategiile de trading pe care le incearca.</p>
<p>Pe la mijlocul lui martie am dat peste doua webinarii inregistrate despre Progress Apama intitulate <strong>&#8220;Construieste Repede, Executa Repede&#8221;</strong> (<em>Build Quickly, Run Fast</em>) si <strong>&#8220;De la concept la profit, imediat&#8221;</strong> (<em>From Concept to Profit in No Time Flat</em>) . Sigur, obiectul nostru de studiu nu este platforma Progress Apama. Aceasta e o platforma HFT (<em>high frequency trading</em> &#8211; trading de viteza inalta) institutionala, pe care n-o sa punem mana niciodata, dar este interesant totusi sa vedem modul lor de abordare a HFT, ca si unele dintre conceptele lor atat despre dezvoltarea sistemelor cat si despre executie. Nici macar marii jucatori de piata nu o folosesc, este pentru o elita foarte mica, <em>la crème de la crème</em>, din moment ce au doar in jur de 120 de clienti la nivel global.</p>
<p>Problema e ca HFT devine mainstream in tradingul institutional. Si cand institutionalii fac ceva, e bine sa-ti deschizi urechile mai larg, pentru ca ei iau intotdeauna banii si probabil au dreptate! Dupa un studiu al Tabb Group, <strong>firmele HFT din SUA sunt doar 2% din cele 20.000 de firme de trading, si fac in jur de 73% din volumul total al actiunilor tranzactionate.</strong> Se pare ca toata piata de actiuni e sub o &#8220;preluare ostila&#8221; din partea HFT, si procesul nu se va opri. Din ce in ce mai multe firme de trading isi achizitioneaza tehnologii HFT, sau, daca nu e posibil, cel putin algoritmi in genul HFT care sa ruleze pe platformele proprii, asa ca trendul nu se va opri. Este important ca mediul de retail sa ramana constient de ce se intampla acolo, pentru a nu avea o perceptie asupra pietei alterata de paradigme prea vechi care nu se mai aplica dezvoltarilor din prezent.</p>
<p>Se pare ca, de la inceputul pietelor, traderii s-au luptat intotdeauna pentru latenta, sa fie primii in a avea o anumita tranzactie. Primul exemplu care imi vine in minte e Nathan Rothschild, care a aflat primul ca Napoleon a fost infrant la Waterloo si a facut ca toata piata sa creada ca Napoleon a fost victorios ca sa poata cumpara totul pe nimic. Alt exemplu mai apropiat de zilele noastre e personajul din <strong>Reminiscences of a stock operator</strong> care isi pierde legatura cu piata si isi reduce latenta folosind noua tehnologie a vremii, telexul. Cu fiecare inovatie majora in comunicatii si computing, un nivel s-a adaugat, si ceea ce era cunoscut in anii dinainte ca <strong>piete de nivel II</strong>, unde traderii umani cotau si executau tranzactii, e acum domeniul masinilor de trading de frecventa inalta. La inceput, totul a fost despre secunde &#8211; asa cum e cazul acum cu userii MetaTrader &#8211; apoi a inceput sa se mearga din ce in ce mai adanc, la milisecunde, microsecunde, si chiar nanosecunde, la care se gandesc acum. <strong>Asta s-a intamplat pentru tehnologiile HFT s-au adaptat, si au modificat comportamentul pietei la fiecare nivel de timp: cand milisecundele au devenit disponibile, algoritmii ce rulau pe statii bazate pe secunde au inceput sa dea gres, iar acum, cand e vremea microsecundelor, statiile curente bazate pe milisecunde sunt in curs de upgrade, iar maine, statii bazate pe nanosecude le vor inlocui pe cele de la nivelul milisecundelor.</strong> </p>
<p><em>Sa fiu putin sarcastic: o microsecunda e 10^-6 dintr-o secunda, iar o nanosecunda e 10^-9. E un lung drum tehnologic pana la timpul Planck, care pare a fi intervalul minim de timp : 5.4 x 10^-44 s. La rata curenta, ar trebui sa ne asteptam la o reducere a latentei de 2 puteri ale lui 10 pe an, daca ceva nu se intampla ca sa schimbe curbura reducerii latentei.</em></p>
<p>Ce se intampla cu algoritmii datorita imbunatatirilor aduse in executie si expansiunii birourilor HFT ? Louis Lovas, Chief Architect pentru Progress Apama, explica <strong>&#8220;ori devin invechite, ori li se descopera mecanismul de functionare, ori spreadurile devin prea mari si nu mai sunt profitabile apoi&#8221;</strong>.</p>
<p>Dan Hubscher, Principal Product Marketing Manager &#8211; Capital Markets pentru Progress Apama citand dintr-o cercetare a AITE Group research, spune ca <strong>&#8220;si intr-un mediu relativ stabil, durata de viata a unui algoritm poate sa fie chiar si trei luni&#8221;</strong>. Acesta a fost motivul pentru dezvoltarea Progress Apama Studio, un mediu de dezvoltare rapida a strategiilor. Pentru ca durata de viata a unui algoritm e limitata, e logic ca daca-i reduci timpul de dezvoltare obtii profituri suplimentare ruland acel sistem pentru mai mult timp, timpul extra fiind castigat in timp ce altii se lupta sa-l replice pe platforme cu medii de dezvoltare mai proaste.</p>
<p>Ceea ce urmeaza e un exemplu din demo-ul lor. Strategia e un arbitraj statistic intre doua actiuni. O medie este calculata, impreuna cu Benzi Bollinger la 1.8 deviatii standard. Ecranul urmator arata strategia ruland intr-o instanta selectata (Bank of America vs Citigroup) , iar fereastra Scenario Instances arata ce face algoritmul in fiecare instanta (prima line e Caterpillar vs Chevron, a doua e Bank of America vs Citigroup). E o strategie predefinita, vine ca si template odata cu statia, nu e nimic secret si important in legatura cu ea.</p>
<p><a href="http://mqlmagazine.com/ro/alte-platforme/progress-apama-cat-de-adanca-e-gaura-de-iepure-a-hft/attachment/apama-algorithmic-trading-accelerator/" rel="attachment wp-att-1164"><img src="http://mqlmagazine.com/ro/wp-content/uploads/2010/03/Apama-Algorithmic-Trading-Accelerator.jpg" alt="" title="Apama Algorithmic Trading Accelerator" width="660" height="718" class="alignnone size-full wp-image-1164" /></a></p>
<p><strong>Cateva observatii asupra strategiei<br />
1. Asa cum se poate vedea, numai un singur spread a fost setat sa fie afisat &#8211; si veti vedea mai jos, in mod ciudat, au ales spreadul dintre preturile mediene. Daca strategia s-ar baza numai pe executii la piata, ar trebui monitorizate cel putin doua spreaduri, iar criteriul de iesire ar fi opusul celui de intrare; daca strategia s-ar baza pe cotare, ar fi patru spreaduri de monitorizat.<br />
2. Cantitatile sunt predeterminate, ca si parametri, prima e 10, a doua 20. Algoritmul nu pare a le ajusta dupa ratia de hedge.<br />
3. Nu vad niciun contor de ticksi sau perioada folosita pentru calculul Benzilor Bollinger.<br />
4. Campurile de cantitate maxima se folosesc pentru controlul pozitiei. Da, acea pozitie detestata pe care o are si MT5 acum. Daca te uiti in fereastra Scenario Instances, in campurile Current Position, vezi ca valorile nu sunt 10 si 20, nu are numai aceste cantitati la un moment dat, ci pozitiile sunt insumate cu noi si noi ordine de 10 si 20, pana la inchidere sau la atingerea valorii maxime specificate de parametru. Asemenea cumulare a ordinelor poate aparea daca una din Benzile Bollinger se incruciseaza cu piata de mai multe ori, dar fara atingerea celeilalte bare.<br />
5. Campul de timeout pare a avea rolul de depreciere a pozitiei, de a comanda inchiderea pozitiilor dupa 20 de secunde. Nu poate fi un timeout de executie pentru ca acum o secunda e un secol in HFT, iar sa astepti 20 sec pentru o confirmare a unui ordin nu-mi pare a fi HFT deloc. Sau am gresit ue in legatura cu HFT ? Vezi articolul nostru despre MetaTrader, <a href="http://mqlmagazine.com/ro/metatrader5/tick-data-charting-de-ce-nu-un-metatrader-de-nivel-ii/" target="_top">Tick Data &#038; Charting : De ce nu un MetaTrader de Nivel II ?</a> !<br />
6. Priveste scala timpului. Sunt 12 secunde intre timpii etichetati, si sunt intre 3 si 7 executii pe interval. Stii vreun EA care tranzactioneaza asa?</strong></p>
<p>Ce e interesant in Progress Apama e cum sunt construite strategiile. Strategiile pot fi construite chiar fara cod, dar spre deosebire de mediile din alte campuri de activitate care incearca dezvoltare fara cod, Progress Apama reuseste cu un concept complex, dar simplu de folosit. Dupa cum spune Dan Hubscher, <strong>&#8220;conform AITE Group, timpul necesar dezvoltarii unui nou algoritmul, de la achizitia datelor si analiza, pana la dezvoltarea strategiei si pana in productie e de la 10 la 28 de saptamani&#8221;.</strong> Deci un mediu de dezvoltare rapida a aplicatiilor a fost o necesitate naturala, pentru ca asta este problema care loveste competitorii directi de pe piata platformelor institutionale, si pune Progress Apama intr-o pozitie mai favorabila. In sistemul lor de dezvoltare, toate variabilele care trebuie urmarite direct sau calculate, isi au originea in &#8216;blocuri inteligente&#8217; intr-o diagrama de blocuri. Fiecare bloc ia datele ori din piata ori din alt bloc, si le scoate ca si input pentru un alt bloc, generand in acelasi timp variabile interne (care se pot vedea in panoul verde din dreapta).</p>
<p><a href="http://mqlmagazine.com/ro/alte-platforme/progress-apama-cat-de-adanca-e-gaura-de-iepure-a-hft/attachment/apama-event-modeler/" rel="attachment wp-att-1165"><img src="http://mqlmagazine.com/ro/wp-content/uploads/2010/03/Apama-Event-Modeler.jpg" alt="" title="Apama Event Modeler" width="949" height="711" class="alignnone size-full wp-image-1165" /></a></p>
<p>Strategia e apoi proiectata ca si diagrama de flux, intr-un mod similar diagramelor folosite cand invatam algoritmica. Fiecare bloc contine conditii si comenzi <strong>scrise in engleza</strong>, toate conditiile, comenzile si varibilele fiind selectabile dintr-un meniu care apare la un clic pe butonul drept.</p>
<p><a href="http://mqlmagazine.com/ro/alte-platforme/progress-apama-cat-de-adanca-e-gaura-de-iepure-a-hft/attachment/apama-event-modeler-diagrams/" rel="attachment wp-att-1166"><img src="http://mqlmagazine.com/ro/wp-content/uploads/2010/03/Apama-Event-Modeler-Diagrams.jpg" alt="" title="Apama Event Modeler - Diagrams" width="950" height="709" class="alignnone size-full wp-image-1166" /></a></p>
<p>Dupa cum se vede, are un mediu de dezvoltare aratos, care raspunde rapid ideilor si complexitatii in continua expansiune a algoritmilor de trading, dar adevarata putere a statiei se dezlantuie cand ruleaza strategiile. Asta o face sa fie o platforma de top.</p>
<p>Exemplul cu arbitrajul statistic e destul de simplu, dupa cum urmeaza spreadul ca si conditie. Dar strategiile HFT adevarate sunt mai complicate, fiecare strategie putand urma evenimente asincrone care au loc pe active multiple:</p>
<p><a href="http://mqlmagazine.com/ro/alte-platforme/progress-apama-cat-de-adanca-e-gaura-de-iepure-a-hft/attachment/progress-apama-algorithmic-trading-rule/" rel="attachment wp-att-1168"><img src="http://mqlmagazine.com/ro/wp-content/uploads/2010/03/Progress-Apama-Algorithmic-Trading-Rule.jpg" alt="" title="Progress Apama - Algorithmic Trading Rule" width="973" height="729" class="alignnone size-full wp-image-1168" /></a></p>
<p><em>Regula de Trading Algoritmic</em></p>
<pre>
CAND
  pretul MSFT se misca in afara mediei mobile cu 2%
URMATA DE (
        Cosul meu creste cu 0.5%
        SI  (
              Pretul HPQ creste cu 5%
              SAU
              Pretul MSFT scade cu 2%
             )
        )
TOATE INTR-O PERIODA
   de 2 minute, oricand

ATUNCI
    Cumpara MSFT
    Vinde HPQ
</pre>
<p><em></p>
<ul>
<li> streamuri multiple de date</li>
<li> secventiere temporala</li>
<li> secvente de evenimente complexe</li>
<li> constrangeri in timp real</li>
<li> actiuni automate</li>
</ul>
<p></em></p>
<p><strong>Cand am avut noi vreodata o asemenea abordare? Cand a a contat vreodata <strong>restrictia temporala</strong> in care semnalele trebuiau sa vina? Of, am uitat, nici macar nu aveam backtesterul&#8230;</strong>. O observatie interesanta despre viziunea lor, este <strong>CAND</strong>. In repetate randuri, Dan Hubscher si Louis Lovas explica cum <strong>CAND nu e acelasi lucru ca DACA</strong>. Fara comentarii.</p>
<p>Pentru a face acest gen de conditii utilizabile de catre proiectantul strategiei, Progress Apama vine cu o chestie inteligenta numita Procesarea Evenimentelor Complexe:</p>
<p><a href="http://mqlmagazine.com/ro/alte-platforme/progress-apama-cat-de-adanca-e-gaura-de-iepure-a-hft/attachment/progress-apama-complex-event-processing/" rel="attachment wp-att-1169"><img src="http://mqlmagazine.com/ro/wp-content/uploads/2010/03/Progress-Apama-Complex-Event-Processing.jpg" alt="" title="Progress Apama - Complex Event Processing" width="973" height="729" class="alignnone size-full wp-image-1169" /></a></p>
<p><em><br />
Procesarea Evenimentelor Complexe:<br />
&#8220;Daca un articol de stiri referitor la IBM e urmat de o crestere cu 5% a pretului actiunii pe orice perioada de 10 secunde si e corelata cu o crestere a indicelui de semiconductori (n.tr. simbol SOX) atunci cumpara 1000 de actiuni IBM&#8221;<br />
</em></p>
<p>Dan Hubscher defineste Procesarea Evenimentelor Complexe ca <strong>&#8220;abilitatea de a lega doua sau mai multe evenimente, chiar daca acestea apar intr-un interval de timp, si de a le determina semnificatia din acea relatie imediat, cum ar fi detectia unui semnal de trading, sau a unei oportunitati de genera alfa.&#8221;</strong></p>
<p><strong>Dar noi nici macar nu avem OnNews(), asa e?</strong>&#8230;</p>
<p>E clar, cuvantul <strong>&#8220;imediat&#8221;</strong> inseamna ca trebuie sa ai cea mai redusa latenta posibila. Eu cred ca CEP poate fi tradusa in MetaTrader, incepand cu implementarile OnChart() si OnTrade() din articolele mele anterioare, si transformarea acestor metode in Procesoare de Evenimente Complexe, care traduc evenimentele de tick si tranzactie in evenimente inteligibile , gen &#8220;MSFT peste Banda Bollinger de 10 secunde&#8221;, urmate de o stampila temporala, si asezate intr-o coada. Coada poate fi preluata de o alta procedura, care aplica restrictiile temporale, genereaza semnale, si le transmite modulelor decizionale. Cititi articolul nostru <a href="http://mqlmagazine.com/ro/modelare-financiara/anatomia-unui-motor-cep-simplu/" target="_top">Anatomia unui motor CEP simplu</a>.</p>
<p>Totusi, ce face Progress Apama sa fie &#8220;masina de un milion de dolari&#8221; nu e niciunul dintre aceste lucruri, pentru ca sunt simple unelte, care pot fi folosite si de statiile de retail, daca developerii ar include asemenea facilitati. Sigur, uneltele de dezvoltare rapida conteaza atunci cand e comparata cu competitorii. Ci, este abilitatea de a rula sute de instante, bazandu-se pe infrastructurile multicore, fara a piede din avantajul de latenta. Si aceasta se face de catre Corelator(ii) de Evenimente.</p>
<p><a href="http://mqlmagazine.com/ro/alte-platforme/progress-apama-cat-de-adanca-e-gaura-de-iepure-a-hft/attachment/progress-apama-scalability-features/" rel="attachment wp-att-1170"><img src="http://mqlmagazine.com/ro/wp-content/uploads/2010/03/Progress-Apama-Scalability-Features.jpg" alt="" title="Progress Apama - Scalability Features" width="974" height="730" class="alignnone size-full wp-image-1170" /></a></p>
<p><em><br />
Progress Apama &#8211; Facilitati de Scalare</p>
<ul>
<li> Iesire si latenta</li>
<ul>
<li>Hiperarbore si Secventiator de Evenimente Complexe</li>
<ul>
<li>Milioane de reguli rulate concurent prin algoritmi inteligenti</li>
<li>Determinism</li>
</ul>
<li>Corelator Paralel</li>
<ul>
<li>Utilizeaza optim structuri multicore</li>
</ul>
</ul>
<li> Mai multe instante Apama intr-o retea</li>
<ul>
<li>Corelatorii pot fi imbinati in configuratii CEP arbitrare (conducte, ochiuri de retea, grile)</li>
<li>Router de evenimente</li>
<ul>
<li> Instalare in medii multiprocesor intinse</li>
</ul>
<li>Monitorizare si management enterprise</li>
<ul>
<li> Configurare grafica printr-o consola de management</li>
</ul>
</ul>
</ul>
<p></em></p>
<p>In Progress Apama exista si posibilitatea de a programa. Vine cu limbajul MonitorScript, un limbaj similar Java, dar mai simplu, simultan cu o implementare completa Java:</p>
<p><a href="http://mqlmagazine.com/ro/alte-platforme/progress-apama-cat-de-adanca-e-gaura-de-iepure-a-hft/attachment/progress-apama-programming-languages/" rel="attachment wp-att-1238"><img src="http://mqlmagazine.com/ro/wp-content/uploads/2010/03/Progress-Apama-Programming-Languages.jpg" alt="" title="Progress Apama - Programming Languages" width="973" height="730" class="alignnone size-full wp-image-1238" /></a></p>
<p><em><br />
Limbaje de programare in Apama</p>
<ul>
<li> MonitorScript : Apama EPL (Limbaj de Procesare a Evenimentelor)</li>
<ul>
<li> Potrivire declarativa + procesare imperativa</li>
<ul>
<li><strong> &#8220;monitoarele&#8221;</strong> vin cu incapsularea</li>
<ul>
<li> instalate/dezinstalate dinamic</li>
</ul>
<li><strong> &#8220;ascultatorii&#8221;</strong> potrivesc, ruteaza si emit evenimente</li>
<ul>
<li> potrivesc secventele de evenimente incluzand constrangerile temporale</li>
<li> sunt setate/eliminate prin <strong>expresii de evenimente</strong></li>
</ul>
<li><strong> &#8220;contextele&#8221;</strong> suporta procesarea paralela</li>
</ul>
</ul>
<li> Suport complet pentru Java</li>
<ul>
<li>Masina virtuala Java incarcata in motorul CEP</li>
<li>interoperabila cu MonitorScript prin rutarea de evenimente</li>
</ul>
</ul>
<p></em></p>
<p>Asa cum am zis mai sus, includ aici parti din codul arbitrajului statistic, cele care cred eu ca explica cel mai bine miezul strategiei, gasite in webinar:</p>
<p><a href="http://mqlmagazine.com/ro/alte-platforme/progress-apama-cat-de-adanca-e-gaura-de-iepure-a-hft/attachment/progress-apama-statistical-arbitrage-begintrading-action/" rel="attachment wp-att-1305"><img src="http://mqlmagazine.com/ro/wp-content/uploads/2010/03/Progress-Apama-Statistical-Arbitrage-beginTrading-action.jpg" alt="" title="Progress Apama - Statistical Arbitrage beginTrading action" width="690" height="507" class="alignnone size-full wp-image-1305" /></a></p>
<p>Aceasta este actiunea beginTrading(), care arata dulciurile din MonitorScript. Dupa cum se poate vedea,<br />
<em>route</em> in acest caz, preia datele din piata. Dar ce e mai important aici, consta in declaratiile <em>on</em>. AceThis statement defines <strong>ascultatorii</strong>, cu o sintaxa de tipul:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1162104"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p1162code104"><pre class="mql5" style="font-family:monospace;">on <span style="color: #008000;">&#91;</span>all<span style="color: #008000;">&#93;</span> <span style="color: #000080;">&lt;</span>expresie de eveniment<span style="color: #000080;">&gt;</span> <span style="color: #000080;">&lt;</span>parte de actiune<span style="color: #000080;">&gt;</span></pre></td></tr></table></div>

<p>Primul <em>on</em> pe care il vezi verifica distrugerea instantei de catre utilizator (intr-o maniera similara lui WM_CLOSE trimis catre WindowProc() ), apoi elimina variabilele si inchide instanta. Al doilea <em>on</em> e mai interesant. Aici, al doilea si al treilea sunt scrise intr-o maniera relativ redundanta, pentru ca prima conditie este un <em>and</em> iar a doua este <em>or</em>. Dupa cum noteaza Louis Lovas in comentariu, <em>sa fim siguri ca avem cel putin un tick de la fiecare inainte de a trece mai departe</em>, ar reiesi ca evenimentul Depth() este declansat de un nou tick, dar se pare ca Depth() este declansat cand <em>structura orderbook se schimba</em>, adica atunci cand cel putin un volum se schimba pe Bid sau pe Ask, nu numai cand vine un nou tick (schimbare a Bid sau Ask). Depth() pare a fi declansat similar cu OnBookEvent() care nu a fost completat inca de MetaQuotes, pe care l-am explicat in alte articole unde am spus ca va declansa mult mai frecvent decat OnTick(). Lasand comparatia la o parte si continuand cu codul, vedem a doua conditie, scrisa de Louis numai ca sa arate cat de flexibila e sintaxa, si ceea ce lanseaza, actiunea processNextSpread().<br />
Un lucru interesant e de remarcat in legatura cu ascultatorii. Uitandu-ne la ascultatori vedem o sintax destul de avansata, mult indepartata de rigiditatea sistemului bazat pe evenimente pe care MetaQuotes se chinuie sa-l faca, si care exista deja in alte statii. Mai intai, <strong>ascultatorii se aplica oricarui fel de eveniment</strong> care este legat de datele subscrise. Dincolo de asta, descrierea evenimentului apare chiar in corpul ascultatorului, si poate fi oricare. Chiar si daca vrei sa preiei un tick pe un alt instrument, trebuie sa rulezi un expert separat (daca nu cumva va fi posibil prin OnBookEvent() ), pentru ca OnTick() raspunde numai de instrumentul curent. In acelasi timp, <strong>fiecare ascultator este o conditie de eveniment &#8211; implementare de actiune</strong>, instalabil aproape in orice parte a codului, dand un grad ridicat de libertate programatorului, pe cand in sistemul bazat pe evenimente tratarea fiecarui tip de eveniment este restransa la un singur corp de cod, unde analizeaza toate evenimentele de acelasi tip, si care daca ar fi tradus in MonitorScript ar insemna ca toti ascultatorii lucrand cu acelasi tip de eveniment sa se afle intr-un singur corp de cod.</p>
<p><a href="http://mqlmagazine.com/ro/alte-platforme/progress-apama-cat-de-adanca-e-gaura-de-iepure-a-hft/attachment/progress-apama-statistical-arbitrage-monitor-core/" rel="attachment wp-att-1297"><img src="http://mqlmagazine.com/ro/wp-content/uploads/2010/03/Progress-Apama-Statistical-Arbitrage-Monitor-Core.jpg" alt="" title="Progress Apama - Statistical Arbitrage Monitor Core" width="614" height="512" class="alignnone size-full wp-image-1297" /></a></p>
<p>Dupa cum se poate vedea, spreadul e calculat chiar cu preturile de mijloc. Ce e mai important, e ca metoda incapsuleaza toata strategia, si se poate vedea cum trimite ordine, fara sa verifice ordinele precedente, demonstrand inca o data sistemul pozitional.</p>
<p><a href="http://mqlmagazine.com/ro/alte-platforme/progress-apama-cat-de-adanca-e-gaura-de-iepure-a-hft/attachment/progress-apama-statistical-arbitrage-submit-order-action/" rel="attachment wp-att-1298"><img src="http://mqlmagazine.com/ro/wp-content/uploads/2010/03/Progress-Apama-Statistical-Arbitrage-Submit-Order-Action.jpg" alt="" title="Progress Apama - Statistical Arbitrage Submit Order Action" width="526" height="476" class="alignnone size-full wp-image-1298" /></a></p>
<p>Se pare ca toata actiunea SubmitOrder() a fost scrisa cu scopul de a face update la variabilele strategiei. Probabil intregul cod ar fi putut sta in processNextSpread(). Ciudat, variabilele de pozitie sunt calculate, prin adaugare sau scadere de volum, in loc sa se foloseasca o functie pentru a pozitia pe fiecare instrument, acolo unde ar fi necesar. Ce nu e clar in cod e unde sunt aplicate constrangerile de pozitie maxima precum si timeout-ul ordinelor.</p>
<p>Ceea ce e esential la Progress Apama e ca poate rula <strong>milioane de reguli concurente</strong> si <strong>face uz de mediile multicore</strong>.</p>
<p>Aici se poate vedea o strategie ruland cu date simulate in 500 de instante pe o masina quad core:</p>
<p><a href="http://mqlmagazine.com/ro/alte-platforme/progress-apama-cat-de-adanca-e-gaura-de-iepure-a-hft/attachment/progress-apama-500-instances/" rel="attachment wp-att-1167"><img src="http://mqlmagazine.com/ro/wp-content/uploads/2010/03/Progress-Apama-500-instances.jpg" alt="" title="Progress Apama - 500 instances" width="1063" height="523" class="alignnone size-full wp-image-1167" /></a></p>
<p>Deci, daca Louis Lovas spune ca merge pe o masina quad core, si nu avem niciun motiv sa nu-l credem, inseamna ca Irene Aldridge a avut dreptate, si <strong>cerintele din ce in ce mai ridicate ale gamerilor au impins tehnologia pana la punctul la care calculatoare care pot rula HFT se gasesc in fiecare casa</strong> ; dar, <strong>ce broker iti va da latenta redusa pentru contul tau sarac de retail</strong> si cine iti va da o platforma care sa nu <strong>risipeasca</strong> resursele procesorului ?</p>
<p>Desigur, n-o sa putem niciodata sa facem asa ceva. Userii MetaTrader nici macar nu au bani suficienti pentru cerintele de marja necesare rularii portofoliilor care reconstruiesc indecsi cu greutatile specifice necesare, asa ca tradingul low latency se scoate din discutie. MetaTrader nu va avea niciodata latenta redusa. Totusi, anumite elemente de HFT, cum ar algoritmii sau procesarea evenimentelor complexe pentru cateva strategii cu o scalare redusa, care se intind pe un numar foare limitat de active, pot fi aduse in MetaTrader. Scopul acestui articol a fost de a introduce cititorii in lumea HFT a problemelor specifice ei.</p>
]]></content:encoded>
			<wfw:commentRss>http://mqlmagazine.com/ro/alte-platforme/progress-apama-cat-de-adanca-e-gaura-de-iepure-a-hft/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tick Data &amp; Charting : De ce nu un MetaTrader de Nivel II ?</title>
		<link>http://mqlmagazine.com/ro/metatrader5/tick-data-charting-de-ce-nu-un-metatrader-de-nivel-ii/</link>
		<comments>http://mqlmagazine.com/ro/metatrader5/tick-data-charting-de-ce-nu-un-metatrader-de-nivel-ii/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 19:36:54 +0000</pubDate>
		<dc:creator>Bogdan Caramalac, MQLmagazine sr.editor</dc:creator>
				<category><![CDATA[MetaTrader5]]></category>

		<guid isPermaLink="false">http://mqlmagazine.com/ro/?p=1223</guid>
		<description><![CDATA[[English version] [MQLmagazine.com in english] [Editia romaneasca]
Ar trebui sa vezi acest articol ca pe o continuare a celui despre Progress Apama, pentru ca vine cu probleme institutionale la nivelul MetaTrader5. Daca vezi strategia de arbitraj statistic, o sa observi ca are o executie cel mult la 1-2 secunde. Deci, nu pare HFT deloc. Dar devine [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mqlmagazine.com/metatrader5/tick-data-charting-why-not-a-level-ii-metatrader/" target="_top">[English version]</a> <a title="[MQLmagazine.com in english]" href="http://mqlmagazine.com" target="_top">[MQLmagazine.com in english]</a> <a title="[Editia romaneasca]" href="http://mqlmagazine.com/ro" target="_top">[Editia romaneasca]</a></p>
<p>Ar trebui sa vezi acest articol ca pe o continuare a celui despre Progress Apama, pentru ca vine cu probleme institutionale la nivelul MetaTrader5. Daca vezi strategia de arbitraj statistic, o sa observi ca are o executie cel mult la 1-2 secunde. Deci, nu pare HFT deloc. Dar devine HFT in contextul rularii a 500 de instante &#8211; pentru ca va avea sute de executii pe secunda. Totusi, pana la 10-20 de instante, e ceva ce si <strong>MetaTrader5 poate suporta</strong>.</p>
<p>Aceasta strategie m-a inspirat sa ma gandesc la un indicator care deseneaza charturi la nivel de tick. Desigur, poti vedea un asemenea chart, dar in Market Watch, facand clic pe &#8220;Tick Chart&#8221; langa &#8220;Symbols&#8221;. Dar daca vrei sa vezi mai mult decat una la un moment dat? Asa ca am scris un indicator. Nu prea mi-a reusit, dar Rosh (Rashid Umarov) mi-a sarit in ajutor. Acesta este corpul indicatorului, scris dupa inserarea nivelelor:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1223106"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
</pre></td><td class="code" id="p1223code106"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//|                                                        Ticks.mq5 |</span>
<span style="color: #808080;">//|                        Copyright 2010, MetaQuotes Software Corp. |</span>
<span style="color: #808080;">//|                                              http://www.mql5.com |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #339900;">#property copyright &quot;2010, MetaQuotes Software Corp.&quot;</span>
<span style="color: #339900;">#property link      &quot;http://www.mql5.com&quot;</span>
<span style="color: #339900;">#property version   &quot;1.00&quot;</span>
<span style="color: #339900;">#property indicator_separate_window</span>
<span style="color: #339900;">#property indicator_buffers 2</span>
<span style="color: #339900;">#property indicator_plots   2</span>
<span style="color: #808080;">//--- plot Bid</span>
<span style="color: #339900;">#property indicator_label1  &quot;Bid&quot;</span>
<span style="color: #339900;">#property indicator_type1   DRAW_LINE</span>
<span style="color: #339900;">#property indicator_color1  Blue</span>
<span style="color: #339900;">#property indicator_style1  STYLE_SOLID</span>
<span style="color: #339900;">#property indicator_width1  1</span>
<span style="color: #808080;">//--- plot Ask</span>
<span style="color: #339900;">#property indicator_label2  &quot;Ask&quot;</span>
<span style="color: #339900;">#property indicator_type2   DRAW_LINE</span>
<span style="color: #339900;">#property indicator_color2  Red</span>
<span style="color: #339900;">#property indicator_style2  STYLE_SOLID</span>
<span style="color: #339900;">#property indicator_width2  1</span>
<span style="color: #339900;">#property indicator_level0  0.00</span>
<span style="color: #339900;">#property indicator_level1  0.00</span>
<span style="color: #339900;">#property indicator_level2  0.00</span>
<span style="color: #339900;">#property indicator_level3  0.00</span>
<span style="color: #339900;">#property indicator_level4  0.00</span>
<span style="color: #339900;">#property indicator_level5  0.00</span>
<span style="color: #339900;">#property indicator_level6  0.00</span>
<span style="color: #339900;">#property indicator_level7  0.00</span>
<span style="color: #339900;">#property indicator_level8  0.00</span>
<span style="color: #339900;">#property indicator_level9  0.00</span>
<span style="color: #339900;">#property indicator_level10  0.00</span>
<span style="color: #339900;">#property indicator_level11  0.00</span>
<span style="color: #339900;">#property indicator_level12  0.00</span>
<span style="color: #339900;">#property indicator_level13  0.00</span>
<span style="color: #339900;">#property indicator_level14  0.00</span>
<span style="color: #339900;">#property indicator_level15  0.00</span>
<span style="color: #808080;">//--- input parameters</span>
<span style="color: #0000ff;">input</span> <span style="color: #0000ff;">int</span>      number_of_ticks<span style="color: #000080;">=</span><span style="color: #008000;">1000</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">input</span> <span style="color: #0000ff;">int</span>      points_indent<span style="color: #000080;">=</span><span style="color: #008000;">10</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">input</span> <span style="color: #0000ff;">int</span>      LevelsCount<span style="color: #000080;">=</span><span style="color: #008000;">7</span><span style="color: #008080;">;</span>
<span style="color: #808080;">//--- indicator buffers</span>
<span style="color: #0000ff;">double</span>         BidBuffer<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">double</span>         AskBuffer<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//| Custom indicator initialization function                         |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #0000ff;">int</span> OnInit<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
<span style="color: #808080;">//--- indicator buffers mapping</span>
   <span style="color: #8a2be2;">SetIndexBuffer</span><span style="color: #008000;">&#40;</span>0,BidBuffer,<span style="color: #333399;">INDICATOR_DATA</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">SetIndexBuffer</span><span style="color: #008000;">&#40;</span>1,AskBuffer,<span style="color: #333399;">INDICATOR_DATA</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">PlotIndexSetDouble</span><span style="color: #008000;">&#40;</span>0,PLOT_EMPTY_VALUE,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">PlotIndexSetDouble</span><span style="color: #008000;">&#40;</span>1,PLOT_EMPTY_VALUE,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">IndicatorSetString</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">INDICATOR_SHORTNAME</span>,<span style="color: #8a2be2;">Symbol</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #000040;">+</span><span style="color: #008080;">&quot; Tick Chart&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #808080;">//---</span>
   <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//| Custom indicator iteration function                              |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #0000ff;">int</span> OnCalculate<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> rates_total,
                <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> prev_calculated,
                <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">datetime</span> <span style="color: #000040;">&amp;</span>time<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span>,
                <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">double</span> <span style="color: #000040;">&amp;</span>open<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span>,
                <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">double</span> <span style="color: #000040;">&amp;</span>high<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span>,
                <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">double</span> <span style="color: #000040;">&amp;</span>low<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span>,
                <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">double</span> <span style="color: #000040;">&amp;</span>close<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span>,
                <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">long</span> <span style="color: #000040;">&amp;</span>tick_volume<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span>,
                <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">long</span> <span style="color: #000040;">&amp;</span>volume<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span>,
                <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> <span style="color: #000040;">&amp;</span>spread<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">int</span> ticks<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
<span style="color: #808080;">//---</span>
   <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>ticks<span style="color: #000080;">==</span>0<span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      <span style="color: #8a2be2;">ArrayInitialize</span><span style="color: #008000;">&#40;</span>AskBuffer,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #8a2be2;">ArrayInitialize</span><span style="color: #008000;">&#40;</span>BidBuffer,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
     <span style="color: #008000;">&#125;</span>
   setMaxMinPrice<span style="color: #008000;">&#40;</span>ticks,points_indent<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #808080;">//--- CopyRates</span>
   MqlTick last_tick<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">SymbolInfoTick</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">Symbol</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,last_tick<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      BidBuffer<span style="color: #008000;">&#91;</span>ticks<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>last_tick.<span style="color: #007788;">bid</span><span style="color: #008080;">;</span>
      AskBuffer<span style="color: #008000;">&#91;</span>ticks<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>last_tick.<span style="color: #007788;">ask</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">int</span> shift<span style="color: #000080;">=</span>rates_total<span style="color: #000040;">-</span>1<span style="color: #000040;">-</span>ticks<span style="color: #008080;">;</span>
      ticks<span style="color: #000040;">++</span><span style="color: #008080;">;</span>
      BidBuffer<span style="color: #008000;">&#91;</span>rates_total<span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>last_tick.<span style="color: #007788;">bid</span><span style="color: #008080;">;</span>
      AskBuffer<span style="color: #008000;">&#91;</span>rates_total<span style="color: #000040;">-</span>1<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span>last_tick.<span style="color: #007788;">ask</span><span style="color: #008080;">;</span>
      <span style="color: #8a2be2;">PlotIndexSetInteger</span><span style="color: #008000;">&#40;</span>0,<span style="color: #333399;">PLOT_SHIFT</span>,shift<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #8a2be2;">PlotIndexSetInteger</span><span style="color: #008000;">&#40;</span>1,<span style="color: #333399;">PLOT_SHIFT</span>,shift<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #8a2be2;">Comment</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;Bid =&quot;</span>,last_tick.<span style="color: #007788;">bid</span>,<span style="color: #008080;">&quot;   Ask =&quot;</span>,last_tick.<span style="color: #007788;">ask</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
     <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #808080;">//--- return value of prev_calculated for next call</span>
   <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>rates_total<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//| set Maximum and Minimum for an indicator window based on last values</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #0000ff;">void</span> setMaxMinPrice<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> last_values,<span style="color: #0000ff;">int</span> indent<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">int</span> dgs<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">double</span> dist<span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> visiblebars<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span><span style="color: #008000;">&#41;</span><span style="color: #8a2be2;">ChartGetInteger</span><span style="color: #008000;">&#40;</span>0,<span style="color: #333399;">CHART_VISIBLE_BARS</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> depth<span style="color: #000080;">=</span><span style="color: #8a2be2;">MathMin</span><span style="color: #008000;">&#40;</span>last_values,visiblebars<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> startindex<span style="color: #000080;">=</span>last_values<span style="color: #000040;">-</span>depth<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>startindex<span style="color: #000080;">&lt;</span>0<span style="color: #008000;">&#41;</span> startindex<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> max_index<span style="color: #000080;">=</span><span style="color: #8a2be2;">ArrayMaximum</span><span style="color: #008000;">&#40;</span>AskBuffer,startindex,depth<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   max_index<span style="color: #000080;">=</span>max_index<span style="color: #000080;">&gt;=</span>0<span style="color: #008080;">?</span>max_index<span style="color: #008080;">:</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> min_index<span style="color: #000080;">=</span><span style="color: #8a2be2;">ArrayMinimum</span><span style="color: #008000;">&#40;</span>BidBuffer,startindex,depth<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   min_index<span style="color: #000080;">=</span>min_index<span style="color: #000080;">&gt;=</span>0<span style="color: #008080;">?</span>min_index<span style="color: #008080;">:</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">double</span> MaxPrice<span style="color: #000080;">=</span>AskBuffer<span style="color: #008000;">&#91;</span>max_index<span style="color: #008000;">&#93;</span><span style="color: #000040;">+</span>indent<span style="color: #000040;">*</span><span style="color: #ff00ff;">_Point</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">double</span> MinPrice<span style="color: #000080;">=</span>BidBuffer<span style="color: #008000;">&#91;</span>min_index<span style="color: #008000;">&#93;</span><span style="color: #000040;">-</span>indent<span style="color: #000040;">*</span><span style="color: #ff00ff;">_Point</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">IndicatorSetDouble</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">INDICATOR_MAXIMUM</span>,MaxPrice<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">IndicatorSetDouble</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">INDICATOR_MINIMUM</span>,MinPrice<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   dgs<span style="color: #000080;">=</span><span style="color: #8a2be2;">SymbolInfoInteger</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">Symbol</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,<span style="color: #333399;">SYMBOL_DIGITS</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   dist<span style="color: #000080;">=</span><span style="color: #8a2be2;">NormalizeDouble</span><span style="color: #008000;">&#40;</span> <span style="color: #008000;">&#40;</span>MaxPrice<span style="color: #000040;">-</span>MinPrice<span style="color: #008000;">&#41;</span><span style="color: #000040;">/</span><span style="color: #008000;">&#40;</span>LevelsCount<span style="color: #000040;">+</span>1<span style="color: #008000;">&#41;</span>, dgs<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span>LevelsCount<span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>
       <span style="color: #8a2be2;">IndicatorSetDouble</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">INDICATOR_LEVELVALUE</span>,i,MinPrice<span style="color: #000040;">+</span>dist<span style="color: #000040;">*</span><span style="color: #008000;">&#40;</span>i<span style="color: #000040;">+</span>1<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #008000;">&#125;</span> 
  <span style="color: #008000;">&#125;</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span></pre></td></tr></table></div>

<p>Ca si indicator la nivel de tick, arata bine. Dar daca vrei sa mai pui ceva pe el, cum ar fi medii mobile sau benzi Bollinger, sau chiar sa monitorizezi spread-uri, ca in fereastra strategiei din Progress Apama ? Asta inseamna ca trebuie sa scrii indicatori din nou si din nou, numai ca sa-ti arate. Desigur, calculele sunt simplu de facut dintr-un expert &#8211; vor avea loc in marea majoritate in evenimentul OnTick() &#8211; dar ai nevoie de indicatori ca sa te ajute sa-ti vizualizezi strategia, chiar si daca aplicarea lor practica va fi in mai tot timpul non necesara, datorita calculului separat in expert. Dar fii constient ca <strong>nu exista istoric la nivel de tick. Asemenea indicatori deseneaza de la zero</strong>. Daca vrei sa vezi pe termen mai indelungat, chiar si cata vreme Strategy Tester nu e disponibil ca sa poti pune indicatorul pe el, trebuie sa-i dai timp sa afiseze, nefiind instant ca ceilalti indicatori.</p>
<p>Deci, <strong>daca ar exista istoric la nivel de tick, insemnand si PERIOD_TICK de asemenea,</strong> atunci anumite lucruri bune pentru noi vor aparea, cum ar fi:<br />
a. Nu ar fi nevoie de indicatori speciali pentru nivelul de tick.<br />
b. Charturile la nivel de tick apar imediat si se intind pe tot istoricul<br />
c. Istoricul la nivel de tick va face backtesterul mai corect, pentru ca nu va avea nevoie sa inventeze ticksi ca sa acopere asemenea zone.<br />
d. <em>(bila neagra):</em> <strong>Spatiu foarte mare de hard disk ocupat de istoric, cerinte mai mari de memorie.</strong></p>
<p>Ce inseamna pentru MetaQuotes:<br />
a. Schimbare in istoric si agregarea datelor, incepand de la tick pentru a face restul, nu de la M1, pastrand M1 ca referinta pentru istoricul vechi unde datele de tick nu sunt disponibile;<br />
b. Modificari minore la functiile de acces la date (gen campuri openbid, openask, closebid, closeask la structura MqlRates etc).<br />
c. Modificari minore la backtester;<br />
d. <strong>MetaTrader brandat ca platforma aproape institutionala.</strong></p>
<p>De ce am vrea asta? Ei bine, de ce baietii mari nu folosesc charturi la nivel de bara? La urma urmei, <strong>nu exista surprize pe charturile la nivel de tick</strong> &#8211; si o sa investigam asta alta data &#8211; asa ca n-o sa te mai temi ca o bara ca un picior de paianjen iti va atinge stop loss in mijlocul unui trend care arata bine.</p>
<p>Asa ca, daca ai Nivelul II disponibil, si daca il automatizezi, esti aproape de nivelul HFT. De fapt, ceea ce e blama astazi nu e intregul trading algoritmic &#8211; pentru ca nu se gandesc niciodata la userii de MetaTrader, E-Signal sau chiar NeoTicker &#8211; ci tradingul institutional , necinstit (a se citi &#8220;colocat&#8221;). La suprafata, discutia este de conflictul intre tradingul computerizat si cel uman. Dar ambele parti ale conflictului lucreaza pe Nivelul II, unde exista posibilitatea de a cota si a avea ordinul executat (adica sa cumperi la bid sau sa vinzi la ask), si sa platesti mici comisioane pentru aceste tranzactii. Chestia e ca, daca am avea Nivel II plus automatizarea MetaTrader, cu comisioane mici de brokeraj, anumite forme de HFT ar deveni aplicabile. Asta e un lucru care a ramas ascuns, faptul ca <strong>tradingul de latenta redusa</strong> nu e chiar acelasi lucru cu <strong>tradingul de frecventa inalta</strong>. Eu cred ca tradingul algoritmic de Nivel II poate fi proiectat sa fie HFT chiar daca nu beneficiaza de executia cu latenta redusa. Problema e, traderii au fost indoctrinati asa de mult cu Nivelul I, incat e foarte greu sa faci ca Nivelul II sa fie acceptat. Pentru ca <strong>Nivelul I are o mentalitate &#8220;cumperi sau vinzi acum, vezi mai tarziu daca ai avut dreptate&#8221;</strong>, pe cand <strong>Nivelul II o are in gen &#8220;vezi asta, cotezi, inchizi mai tarziu daca ai avut executie&#8221;</strong>. Acelasi &#8220;mai tarziu&#8221; are intelesuri diferite, pentru Nivelul I inseamna de la minute in sus, de regula ore, pe cand la Nivelul II inseamna secunde. Stopul tarator in Nivelul II se misca pip cu pip. Si totul este pentru a face <strong>bani in timp real</strong>. Nu in ore, nu maine, nu saptamana viitoare. Ci mai degraba, ca sa vezi equity crescand de cateva ori pe minut. Ceea ce se uita de multe ori in trading, e ca strategiile de trading nu sunt pentru roboti care pot astepta o eternitate sa-si imbunatateasca strategiile de trading. <strong>Viata se intampla in timp real.</strong> <strong>Nu suntem nemuritori</strong> si dincolo de asta, <strong>tineretea e al naibii de scurta</strong>. Acesta e si unul din factorii care imping reducerea latentei. Pe de o parte, exista nevoia de a avea ordinele executate inaintea concurentei, pe de alta parte, mai multe si mai multe profituri pe o unitate de timp din ce in ce mai mica inseamna salarii mai grase pentru management&#8230; In acest timp, chiar si cel mai rationali si mai de succes traderi pe Nivelul I nu pot trece de anumite limte ale rentabilitatii. Esential, sistemele automate de Nivel II au scopul asta, de a comprima timpul, si de a obtine rentabilitati similare Nivelului I, dar intr-un timp de o suta de ori mai mic sau chiar si mai mic. Dar aceste rentabilitati sunt relative si mici, vazute din interiorul industriei hedge fund. Pentru ca, rezultatele sistemelor sunt relative fata de lichiditatea medie utilizata. Adica, o mare parte din lichiditate ramane neutilizata, dar trebuie sa intoarca rentabilitate. Si, in timp ce diversificarea e un mod de a utiliza mai multa lichiditate, timpul e cealalta fata a monedei, pentru ca o tranzactie pe secunda e un ceva, iar o suta de tranzactii in aceeasi secunda, intinzandu-se pe intervale in microsecunde fiecare, sunt altceva. Pe de alata parte, platformele HFT costa sume nerusinate de bani, iar institutiile mai mici nu si le permit, pentru ca o mare parte din rentabilitate trebuie sa finanteze costurile platformelor si salariile quantilor cu PhD. Acum intelegi de ce un MetaTrader de Nivel II, chiar fara latenta redusa, este important ? Chiar si Irene Aldridge admite ca <strong>nu sunt prea multe companii care vand produse pentru buyside</strong>. De fapt, daca excludem Strategy Runner, X-Trader si Ninja Trader, nici nu-mi aduc aminte de altele. X-Trader are o automatizare institutionala in termeni de costuri, iar Strategy Runner e asa de criptic ca trebuie sa platesti foarte mult pentru dezvoltarea strategiilor. Niciuna dintre aceste platforme nu integreaza optiunile, iar formarea pietei in optiuni, avand executii acolo, e o cale importanta de a face economii, caci spreadurile optiunilor sunt ridicate.</p>
<p>La urma urmei, daca te uiti pe forumul MQL5, poti vedea ca MetaQuotes cel putin pare a fi hotarata sa <strong>faca MetaTrader 5 cea mai buna platforma de trading din lume</strong>.  Daca MetaTrader5 devine <strong>Level II ready</strong> (va amintiti vechile placi de baza cu eticheta <strong>Prescott ready</strong> ?) si prin generarea unei constientizari crescute asupra importantei actiunii la nivel de tick in comunitatea de retail trading, se pot determina schimbari la nivelul brokerajelor.<br />
Pe masura ce brokerii vor da mai mult acces la ECN-uri (de la <em>Electronic Currency Network</em>) cu spreaduri stranse, acestea vor cobori, si e posibil ca sistemul bazat pe spreaduri chiar sa dispara, fiind inlocuit de modelul pe baza de comision &#8211; si zic aici comisioane mici, suficient de mici cat sa-l faca pe trader sa simta ca e intr-un ECN , nu ca are doar un feed de retail care brandeaza comisionul in loc de spread. In acest fel mult strategii de la nivelele institutionale vor deveni portabile catre MetaTrader si lumea de retail &#8211; care poate chiar va deveni &#8220;institutional cu latenta mare&#8221; , sau, mai important pentru traderii de retail, <strong>HFT GRATUIT, usor de instalat care nu e bazat pe latenta</strong>. Problema e, comisioanele sunt functie de volum. Cu cat e mai mare volumul, cu atat sunt mai mici comisioanele. Totusi, cel putin traderii forex au levier mare. (Da, americanii s-ar putea ca in curand sa nu-l mai aiba). Avand levier mare, pierderile mici continua sa loveasca in equity. Cat de mult ai putea suporta pierderi din comisioane pana cand acestea devin destul de mici pentru trece pe profit din rabaturi? Sa nu uitam, economia globala e in recesiune, si brokerii, ca orice afacere normala din lumea asta, traiesc din vanzari&#8230; Ceea ce-i face mai deschisi pentru inovare si reducerea comisioanelor, de la mici la infime. </p>
<p>Pe de alta parte, cum ar putea fi MT sa fie utilizat ca platforma de Nivel II asa cum e acum? Sigur, OrderSend() poate fi folosit intr-o maniera Level II, dar cu un backtester care doar modeleaza ticksi, in loc de a fosi ticksi reali? Cred ca nu. Datele la nivel de tick sunt absolut necesare pentru ca statia sa fie brandata ca una de Nivel II.<br />
Totusi, mai sunt lucruri de facut pana acolo, caci MetaQuotes mai are si alte teme de facut : Strategy Tester, o sintaxa mai buna pentru OnTrade(), fereastra Depth of Market si mai ales OnBookEvent(). Cand toate acestea vor fi completate, MT5 va fi atat de departe incat vei uita de dulciurile MT4, sunt sigur de asta&#8230;</p>
<p><em>Daca traderii din comunitatea de retail nu cer totusi mai mult, nimic nu se va obtine, caci ei tin mult la Level II&#8230;</em></p>
]]></content:encoded>
			<wfw:commentRss>http://mqlmagazine.com/ro/metatrader5/tick-data-charting-de-ce-nu-un-metatrader-de-nivel-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Anatomia unui motor CEP simplu</title>
		<link>http://mqlmagazine.com/ro/modelare-financiara/anatomia-unui-motor-cep-simplu/</link>
		<comments>http://mqlmagazine.com/ro/modelare-financiara/anatomia-unui-motor-cep-simplu/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 19:36:43 +0000</pubDate>
		<dc:creator>Bogdan Caramalac, MQLmagazine sr.editor</dc:creator>
				<category><![CDATA[Modelare financiara]]></category>

		<guid isPermaLink="false">http://mqlmagazine.com/ro/?p=1367</guid>
		<description><![CDATA[[English version] [MQLmagazine.com in english] [Editia romaneasca]
Daca n-ar fi acea abreviere CEP probabil ati intreba cum ceva inerent complex ar putea deveni simplu. Chestia e ca totul incepe mai intai a fi simplu inainte de a evolua in ceva complicat.
Chiar si daca mi-ati citit articolul despre Progress Apama, va reamintesc definitia data CEP de Dan [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mqlmagazine.com/financial-modelling/anatomy-of-a-simple-cep-engine/" target="_top">[English version]</a> <a title="[MQLmagazine.com in english]" href="http://mqlmagazine.com" target="_top">[MQLmagazine.com in english]</a> <a title="[Editia romaneasca]" href="http://mqlmagazine.com/ro" target="_top">[Editia romaneasca]</a></p>
<p>Daca n-ar fi acea abreviere CEP probabil ati intreba cum ceva inerent complex ar putea deveni simplu. Chestia e ca totul incepe mai intai a fi simplu inainte de a evolua in ceva complicat.</p>
<p>Chiar si daca mi-ati citit articolul despre <a title="Progress Apama" href="http://mqlmagazine.com/ro/alte-platforme/progress-apama-cat-de-adanca-e-gaura-de-iepure-a-hft/" target="_top">Progress Apama</a>, va reamintesc definitia data CEP de Dan Hubscher : <strong>&#8220;abilitatea de a lega doua sau mai multe evenimente, chiar daca acestea apar intr-un interval de timp, si de a le determina semnificatia din acea relatie imediat, cum ar fi detectia unui semnal de trading, sau a unei oportunitati de genera alfa.&#8221;</strong></p>
<p>Deci, dat fiind ca trebuie sa se formeze conexiuni intre evenimente, avand o constrangere temporala, <strong>trebuie sa existe o coada de evenimente, care stocheaza evenimente individuale</strong> pe masura ce acestea sunt receptionate. Desigur, <strong>stocarea nu are loc la infinit</strong> intr-o coada in continua crestere; marimea cozii trebuie sa fie dinamica, dar lungimea ei in timp trebuie sa nu depaseasca un interval de timp predeterminat, sa zicem 5 minute. De aceea un motor CEP, care este in principal pentru HFT si trading de Nivel II, nu trebuie sa fie amestecat cu evenimente de Nivel I, deoarece acestea se intind pe un interval de timp mult mai larg, ceea ce ar face nu numai ca stiva de evenimente sa creasca pana la o marime necontrolabila, ci ar si reduce viteza motorului.</p>
<p><strong>Intervalul de timp acoperit</strong> este prima limitare a motorului. </p>
<p>A doua, este legatura dintre evenimentele simple. <strong>Evenimentele simple nu sunt complet independente</strong>, asa cum ar reiesi din webinarul Progress Apama. De exemplu, ai putea considera o intersectie a unei Benzi Bollinger superioare ca si eveniment, dar si intersectia Benzii Bollinger inferioare. Aceste evenimente sunt complet opuse. Daca s-ar intampla amandoua, cand al doilea are loc, primul ar trebui eliminat din coada de evenimente, dupa cum se vede in schema de mai jos, evenimentul 4 este sters. Se poate opta pentru doua cai : o varianta in care evenimentele opuse sunt cautate pe o perioada in coada de evenimente &#8211; <em>perioada dificil de estimat</em> &#8211; sau o alta in care inainte de validarea unui eveniment complex sunt cautate evenimente opuse aflate dupa evenimentele simple care constituie evenimentul complex.</p>
<p>In al treilea rand, este <strong>evitarea redundantei</strong>. Implementarile proaste pot cauza redundanta, adica acelasi eveniment sa fie raportat in continuu.  De exemplu, &#8220;MSFT este sub media mobila de 5 minute&#8221;. O paranteza aici &#8211; <em>nu ma refer la chartul de 5 minute, ci la media mobila a ticksilor care au aparut in ultimele 5 minute, de aceea am zis ca MetaTrader ar trebui sa aibe istoric la nivel de tick si perioada tick activata.</em> Cand aceasta se intampla, e un eveniment. Dar in secunda urmatoare, la tickul urmator, va fi raportata din nou, iar motorul trebuie sa o respinga, pentru ca este deja in coada de evenimente, asa cum e cazul cu evenimentul colorat in portocaliu din schema, care nici nu ia un numar, pentru ca este respins de la inceput. Asemenea situatii ar trebui evitate din start &#8211; motorul nu ar trebui sa piarda timp cu verificarea redundantei, altfel ar trebui sa filtreze aceste evenimente, dar e mai bine ca fluxul de evenimente sa fie curatat dinainte.</p>
<p><a href="http://mqlmagazine.com/ro/modelare-financiara/anatomia-unui-motor-cep-simplu/attachment/motor-cep-simplu/" rel="attachment wp-att-1363"><img src="http://mqlmagazine.com/ro/wp-content/uploads/2010/03/Motor-CEP-Simplu.jpg" alt="" title="Motor CEP Simplu" width="898" height="531" class="alignnone size-full wp-image-1363" /></a></p>
<p>Aceasta e schema de functionare a motorului. Evenimentele de tick, sau evenimente mai complexe provin din evenimentul OnChart() care este declansat de mai multi EA Tick Event, asa cum am descris in articolul <a title="Evenimente de tick in MQL5 : complicate deocamdata, dar functionale" href="http://mqlmagazine.com/ro/programarea-in-mql/evenimente-de-tick-in-mql5-complicate-deocamdata-dar-functionale/" target="_top">Evenimente de tick in MQL5 : complicate deocamdata, dar functionale</a> .</p>
<p>Prima coloana este numarul evenimentului din coada, de la cel mai recent la cel mai vechi. Fiecare eveniment simplu, care este legat la date, are un numar alocat. Acelasi eveniment, cand are loc pe un instrument diferit, are alocat un alt numar, asa ca aceeasi secventa de evenimente care formeaza un eveniment complex va fi construit din aceleasi evenimente simple dar cu alti identificatori. Motorul trebuie sa stie <strong>ce evenimente sunt opuse</strong>, de exemplu 1 si 3, de asemenea caror evenimente le este permis sa apara de mai multe ori in lant, pentru ca unora le va fi permis (de exemplu evenimentele de executie (cele care incep cu E in schema)). Tuturor celorlalte evenimente li se interzice sa apara de mai multe ori &#8211; dar toturi nu de catre motorul propriu-zis, care anima coada de evenimente &#8211; ci chiar din faza de preprocesare.</p>
<p>In acelasi timp, motorul CEP trebuie sa recunoasca fiecare eveniment complex cunoscand toate aranjamentele de evenimente simple.<br />
De exemplu, daca un eveniment complex pentru Microsoft (MSFT) consta in &#8220;10 urmat de (11 sau (12 si 13))&#8221; in 3 minute, atunci motorul va cauta , in 3 minute : 10, 11 ; 10, 12, 13 ; 10, 13, 12 insemnand toate caile alternative. Daca acelasi eveniment ar fi mapat pentru SP500 (^GSPC) , dat fiind ca toate subevenimentele au numere diferite, conditia va arata gen &#8220;5 urmat de (15 sau (16 si 17))&#8221;, avand aranjamentele ; 5, 15 ; 5, 16, 17 ; 5, 17, 16. Asemenea aranjamente pot fi date direct motorului, scrise direct in interior, sau generate cu un algoritm, transformand expresia binara, cu diferenta notabila ca <strong>&#8220;URMAT DE&#8221; e un &#8220;SI&#8221; necomutativ.</strong>. Pentru ca regulile sunt construite ca serii de evenimente ce apar intr-o anumita ordine, negatia nu poate exista la fel ca intr-o expresie binara. Poate fi implementata doar ca si interdictie de aparitie a anumitor evenimente pe parcursul restrictiei temporale sau in anumite secvente , drept simple evenimente interzise intre evenimentele cerute.</p>
<p>Se poate vedea ca am inclus in schema doua coloane de asociere. Adica, <strong>un eveniment simplu poate fi asociat la mai mult decat un eveniment complex</strong>, pentru ca altfel anumite reguli nu s-ar declansa niciodata. Evenimentele complexe trebuie sa aiba un set diferit de ID-uri la evenimente, pentru a nu se intersecta cu cele simple. Motorul va trimite evenimentele complexe spre a fi procesate de utilizator in EventsCallback(), dar in acelasi timp, userul le poate trimite printr-o <strong>conducta</strong> la un alt motor CEP.</p>
<p>Algoritmul de potrivire incepe cu constructia evenimentelor simple per fiecare eveniment complex. Matricea evenimentelor simple va contine pe fiecare linie cate un aranjament. Pentru ca verificarea este facuta invers, de la evenimentele recente catre evenimentele mai vechi, <strong>aranjamentele trebuie sa fie scrise invers in matrice</strong>. Fiecare eveniment complex va necesita o trecere prin coada de evenimente numai cata vreme se intinde constrangerea temporala, intr-o maniera verticala: prima trecere va verifica evenimentele de pe prima coloana, si evenimentele simple gasite in acest fel vor fi pre-asociate. Urmatoarea trecere va fi pe a doua coloana numai pentru aranjamentele care au avut o pre-asociere pe prima. Cand nu mai au loc pre-asocieri noi, cautarea este anulata pentru evenimentul complex in cauza. Totusi, pentru a minimiza timpul necesar, fiecare trecere va privi toate evenimentele pana are loc inceperea urmatoarei treceri. Cand cautarile sunt anulate pentru toate evenimentele, algoritmul se termina.<br />
Cand un aranajament are toate evenimentele simple pre-asociate, e timpul pentru verificarea negatiilor. Mai intai, se verifica toata perioada pentru negatiile globale &#8211; evenimentele interzise pe toata perioada evenimentului complex, apoi pentru evenimentele interzise intre evenimentele pre-asociate, si in final verificarea de timp pentru a ne asigura ca ele inca respecta constrangerea temporala, evenimentele simple sunt asociate evenimentului complex, <em>exceptie atunci cand in tabelul de asocieri al evenimentului simplu nu se gaseste deja aceasta asociere &#8211; pentru a evita re-asocierea lui la acelasi eveniment complex</em>.<br />
Evenimentul complex rezultat este pus intr-o coada si transmis la EventsCallback(). <em>Trimiterea evenimentelor la EventsCallback() trebuie sa aiba loc dupa terminarea algoritmului altfel ar putea aparea apelari recursive ale motorului care nu isi vor inceta executia.</em>Pentru evenimentele simple care sunt asociate, pozitia in tabelul de asocieri va fi completata cu evenimentul complex, si pozitia va incrementata cu o unitate.</p>
<p>Aici e un exemplu cu doua evenimente complexe is stagii difererite de pre-asociere:</p>
<p><a href="http://mqlmagazine.com/ro/modelare-financiara/anatomia-unui-motor-cep-simplu/attachment/prebinding-of-simple-events/" rel="attachment wp-att-1366"><img src="http://mqlmagazine.com/ro/wp-content/uploads/2010/03/Prebinding-of-Simple-Events.jpg" alt="" title="Prebinding of Simple Events" width="486" height="469" class="alignnone size-full wp-image-1366" /></a></p>
<p>Pentru evenimentul de MSFT, motorul gaseste evenimentul 12 la prima trecere, si il pre-asociaza pe al treilea aranjament. La a doua trecere, gaseste evenimentul 13, si il pre-asociaza pe al doilea aranjament. Mai gaseste si 12 inca o data, dar nu il pre-asociaza pe al doilea aranjament pentru ca a aparut inainte de 13. Daca la urmatoarea trecere gaseste evenimentul mai vechi, 10, al treilea aranjament este complet, si, in lipsa negatiilor, daca restrictia temporala inca e aplicabila, in conditiile in care evenimentul complex 1 nu a fost asociat inca, atunci evenimentele simple de pe al treilea aranjament sunt asociate evenimentului complex 1, contorul de asocieri incrementat, evenimentul pus in coada de asocieri. Pentru evenimentul de ^GSPC (evenimentul complex 2), motorul a completat deja primul aranjament. Evenimentul 5 nu apare verificat pentru al doilea si al treilea aranjament intrucat evenimentele de pe coloanele precedente nu au fost verificate.</p>
<p>Cat despre evenimentele de executie, acestea sunt trimise de EnumCallbacks(), eveniment al clasei DealHandler din articolul a title=&#8221;Distingirea executiilor cvasisimultane – clasa de raportare a ultimelor tranzactii&#8221; href=&#8221;http://mqlmagazine.com/ro/programarea-in-mql/distingirea-executiilor-cvasisimultane-clasa-de-raportare-a-ultimelor-tranzactii/&#8221; target=&#8221;_top&#8221;>Distingirea executiilor cvasisimultane – clasa de raportare a ultimelor tranzactii</a>. Evenimentele simple de executie pot fi mapate in evenimente mai complex de executie deoarece tranzactiile au numere magice si comentarii, si daca ar fi sa cumperi de doua ori aceleasi 1000 de actiuni, vei stie fiecare din ce eveniment complex face parte. De aceea asemenea evenimente pot fi tratate ori separat ori in combinatie cu evenimentele de piata.</p>
<p>Vom veni cu un exemplu de cod intr-un articol viitor.</p>
]]></content:encoded>
			<wfw:commentRss>http://mqlmagazine.com/ro/modelare-financiara/anatomia-unui-motor-cep-simplu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Iadul DLL, editia MQL5 : UNICODE vs ANSI</title>
		<link>http://mqlmagazine.com/ro/programarea-in-mql/iadul-dll-editia-mql5-unicode-vs-ansi/</link>
		<comments>http://mqlmagazine.com/ro/programarea-in-mql/iadul-dll-editia-mql5-unicode-vs-ansi/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 19:36:19 +0000</pubDate>
		<dc:creator>Bogdan Caramalac, MQLmagazine sr.editor</dc:creator>
				<category><![CDATA[Programarea in MQL]]></category>

		<guid isPermaLink="false">http://mqlmagazine.com/ro/?p=1414</guid>
		<description><![CDATA[[English version] [MQLmagazine.com in english] [Editia romaneasca]
Cu multi multi ani in urma, cand eram copii, la inceputul anilor &#8216;90, doua limbaje se bateau in lumea developerilor. Pascal, cu o sintaxa pamanteasca, usor de inteles, potrivita unui limbaj de nivel inalt, si C++, cu o sintaxa mai criptica, dar mai rapida in folosire, potrivita nivelului sau [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mqlmagazine.com/mql-programming/dll-hell-mql5-edition-unicode-vs-ansi/" target="_top">[English version]</a> <a title="[MQLmagazine.com in english]" href="http://mqlmagazine.com" target="_top">[MQLmagazine.com in english]</a> <a title="[Editia romaneasca]" href="http://mqlmagazine.com/ro" target="_top">[Editia romaneasca]</a></p>
<p>Cu multi multi ani in urma, cand eram copii, la inceputul anilor &#8216;90, doua limbaje se bateau in lumea developerilor. Pascal, cu o sintaxa pamanteasca, usor de inteles, potrivita unui limbaj de nivel inalt, si C++, cu o sintaxa mai criptica, dar mai rapida in folosire, potrivita nivelului sau mediu. C++ a castigat batalia, si tot ce s-a facut in Windows a inceput sa fie compilat in C++ si a inceput sa-i poarte semnele: <strong>siruri terminate cu null</strong> si ce era cunoscut atunci ca si <strong>conventia standard de apelare</strong>.</p>
<p><strong>Sirurile terminate cu null</strong> erau siruri normale, cunoscute ca si siruri ANSI, dar la vremea aceea nu exista UNICODE. Fiecare caracter avea un singur byte iar sirurile aveau o lungime dinamica, intrucat erau presupuse a se termina cu null (un byte zero).<br />
De aceea aplicatiile primeau un pointer care sa indice de unde sa citeasca aceste siruri, si stiau si unde acestea se terminau, cautand un byte zero. Cat despre <strong>conventia standard de apelare</strong> a procedurilor, compilatorul C++ impingea parametrii pe stiva incepand de la ultimul si terminand cu primul.</p>
<p><strong>Sir terminat cu null (ANSI)</strong></p>
<pre>
|---------------|
|c1|c2|....| 0  |
|b1|b2|....|bn+1|
|---------------|
</pre>
<p>Pascal era inversul absolut al C++ in aceste privinte. Sirurile erau si ele tot ANSI, numai un byte per caracter, dar sirurile aveau o lungime fixata de 255 de bytes, sau definita de compilator. Aveau un byte exrtra in fata, specificand lungimea logica a sirului (cati bytes erau efectiv folositi). Cat despre conventia de apelare, aceasta era perfect invers, pentru ca in <strong>conventia de apelare pascal</strong>, parametrii erau impinsi pe stiva de la primul spre ultimul.</p>
<p><strong>Sir Pascal Standard(ANSI)</strong></p>
<pre>
|------------------|
|ln|c1|c2|....|c255|
|b1|b2|b3|....|b256|
|------------------|
</pre>
<p>De aceea sirurile Pascal puteau fi trimise cu totul functiilor, fara nevoia de a se trimite prin referinta, caci acesta este unicul mod prin care trimiterea sirurilor este posibila in C++.</p>
<p>Intrucat C++ a castigat batalia, compilatorul Pascal a trebuit sa se adapteze, si conventia de apelare a fost o sarcina usoara. Cat despre siruri, problema s-a complicat, iar programatorii au trebuit sa se chinuie cu PCHAR, un nume dat tablourilor fixe de cate un byte pe element, care trebuia sa tina siruri C++ terminate cu null care erau trimise prin referinta.</p>
<p>Ca si cum nu era de-ajuns, <strong>a aparut standardul UNICODE</strong>.</p>
<p>UNICODE este un standard complicat, si nici eu nu-l cunosc in intregime. Diferenta dintre ANSI si UNICODE e aceea ca in UNICODE caracterele sunt mai largi, se intind pe doi bytes fiecare, dar sunt si siruri cu caracterele codate pe 4 bytes. La inceput, sirurile UNICODE pareau ceva nou si ciudat. De aceea, erau numite <strong>siruri largi</strong> (<em>wide strings</em>). Functiile Windows API care lucrau cu sirurile largi aveau numele terminat in W ; pointerii la siruri ANSI terminate cu null se numeau <strong>char*</strong> , iar pointerii la siruri UNICODE au trebuit sa fie numite <strong>wchar_t*</strong>. Cum UNICODE a devenit standard general in timp, acum sirurile UNICODE sunt numite simplu <strong>siruri terminate cu null</strong>.</p>
<p><strong>Siruri terminate cu null (UNICODE)</strong></p>
<pre>
|------------------------------------------|
|  c1 |  c2 |....|      cn   |      0      |
|b1|b2|b3|b4|....|b 2n-1|b 2n|b 2n+1|b 2n+2|
|------------------------------------------|
</pre>
<p>MQL5, ca majoritatea mediilor de programare din prezent, este UNICODE. Chiar si sirurile simple pe care le folosesti in mod regulat sunt UNICODE. Arata ca si cum ar fi ANSI, dar reprezentarea interna e UNICODE. Aceasta din cauza ca ANSI poate fi impachetat in UNICODE, prin umplerea bytes complementari cu 0.</p>
<p><strong>ANSI impachetat in UNICODE (siruri normale MQL5)</strong></p>
<pre>
|------------------------------------------|
|  c1 |  c2 |....|      cn   |      0      |
|b1|0 |b3|0 |....|b 2n-1| 0  |b 2n+1|  0   |
|b1|b2|b3|b4|....|b 2n-1|b 2n|b 2n+1|b 2n+2|
|------------------------------------------|
</pre>
<p>Deci, intr-un sir ANSI impachetat in UNCODE, fiecare byte par este 0.<br />
Dar daca ai un DLL C++ mai vechi, care foloseste siruri <strong>ANSI</strong> terminate cu null.<br />
Aceasta inseamna ca se asteapta si intoarce siruri ANSI terminate cu null.</p>
<p>Deci, daca trimiti un sir &#8220;ABC&#8221; catre un asemenea DLL, vei avea mapat in bytes : 65, 0, 66, 0, 67, 0.<br />
DLL-ul va vedea primul 0 ca si null-ul care termina sirul si va intelege doar &#8220;A&#8221; din tot sirul.</p>
<p>Daca e sa primesti &#8220;ABC&#8221; din acest tip de DLL, vei primi in bytes : 65, 66, 67, 0.<br />
MQL5, fiind UNICODE, va intelege primul caracter ca 65 si 66 (ceva ce pare in chineza) si al doilea caracter ca 67 si 0, mapandu-l in &#8220;C&#8221;. Apoi va continua sa citeasca, daca nu e nici o eroare <strong>access violation</strong> pana cand gaseste 0 si 0, care formeaza null-ul, rezultand intr-o pasareasca de neinteles. Eroarrea access violation ar putea sa fie ocolita pentru ca MT5 ar putea aloca suficient spatiu pentru primirea sir.</p>
<p>Din pacate, MQL5 nu are un tip <strong>ansistring</strong> care sa se ocupe de conversie automat. Totusi, pe partea buna a problemei, cel putin in ambele cazuri sirurile sunt trimise prin referinta, deci e doar o problema de semnificatie decat una de conflict in trimiterea prin valoare sau referinta.</p>
<p>Aceasta inseamna ca trebuie sa trimiti siruri UNICODE care trebuie sa fie decodate corect ca ANSI, si sa primesti siruri ANSI pe care trebuie sa le convertesti la UNICODE pentru a le folosi.</p>
<p>Cand primesti un sir ANSI intr-o forma UNICODE, incepi citirea caracterelor UNICODE, printr-un typecast al fiecarui caracter intr-un <strong>unsigned short</strong>, apoi imparti acesta in doua ANSI (prin modulo 256), adaugand apoi la UNICODE-ul rezultant mai intai restul (ca si cod ANSI) , si apoi catul (ca si cod ANSI). Asa ca fiecare 2 bytes din ANSI original se mapeaza in 4 bytes (2 caractere UNICODE). </p>
<p>Cand vrei sa impachetezi un UNICODE codat ca ANSI, ca un sir MQL5, ca si ANSI, trebuie sa citesti fiecare doua caractere UNICODE la rand, si fortezi typecast-ul lor in <strong>unsigned char</strong>, de marimea caracterelor ANSI. Apoi impachetezi noul caracter UNICODE cu primul citit ca rest si al doilea ca si cat intr-un <strong>unsigned short</strong> mai mare, care se va adauga ca si cod al noului caracter la noul sir rezultant UNICODE. </p>
<p>Ceea ce urmeaza este codul celor doua functii de conversie, scrise ca o <strong>biblioteca</strong>. Fii atent cand faci acest fisier, sa fie in folderul <strong>include</strong>, si sa-l salvezi ca <strong>stringlib.mqh</strong>.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1414110"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
</pre></td><td class="code" id="p1414code110"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//|                                                    stringlib.mqh |</span>
<span style="color: #808080;">//|                                       Copyright Bogdan Caramalac |</span>
<span style="color: #808080;">//|                                           http://mqlmagazine.com |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #339900;">#property copyright &quot;Bogdan Caramalac&quot;</span>
<span style="color: #339900;">#property link      &quot;http://mqlmagazine.com&quot;</span>
&nbsp;
<span style="color: #0000ff;">string</span> ANSI2UNICODE<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">string</span> s<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">ushort</span> mychar<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">long</span> m,d<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">double</span> mm,dd<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">string</span> img<span style="color: #008080;">;</span>    
   <span style="color: #0000ff;">string</span> res<span style="color: #000080;">=</span><span style="color: #008080;">&quot;&quot;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">StringLen</span><span style="color: #008000;">&#40;</span>s<span style="color: #008000;">&#41;</span><span style="color: #000080;">&gt;</span>0<span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>
      <span style="color: #0000ff;">string</span> g<span style="color: #000080;">=</span><span style="color: #008080;">&quot; &quot;</span><span style="color: #008080;">;</span>
      <span style="color: #0000ff;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>i<span style="color: #000080;">&lt;</span><span style="color: #8a2be2;">StringLen</span><span style="color: #008000;">&#40;</span>s<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span>
         <span style="color: #008000;">&#123;</span>          
          <span style="color: #0000ff;">string</span> f<span style="color: #000080;">=</span><span style="color: #008080;">&quot;  &quot;</span><span style="color: #008080;">;</span>          
          mychar<span style="color: #000080;">=</span><span style="color: #0000ff;">ushort</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">StringGetCharacter</span><span style="color: #008000;">&#40;</span>s,i<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
          mm<span style="color: #000080;">=</span><span style="color: #8a2be2;">MathMod</span><span style="color: #008000;">&#40;</span>mychar,256<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
          img<span style="color: #000080;">=</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>mm,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
          m<span style="color: #000080;">=</span><span style="color: #8a2be2;">StringToInteger</span><span style="color: #008000;">&#40;</span>img<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
          dd<span style="color: #000080;">=</span><span style="color: #008000;">&#40;</span>mychar<span style="color: #000040;">-</span>m<span style="color: #008000;">&#41;</span><span style="color: #000040;">/</span><span style="color: #008000;">256</span><span style="color: #008080;">;</span>
          img<span style="color: #000080;">=</span><span style="color: #8a2be2;">DoubleToString</span><span style="color: #008000;">&#40;</span>dd,0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
          d<span style="color: #000080;">=</span><span style="color: #8a2be2;">StringToInteger</span><span style="color: #008000;">&#40;</span>img<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
          <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>m<span style="color: #000040;">!</span><span style="color: #000080;">=</span>0<span style="color: #008000;">&#41;</span>
            <span style="color: #008000;">&#123;</span>
             <span style="color: #8a2be2;">StringSetCharacter</span><span style="color: #008000;">&#40;</span>f,0,<span style="color: #0000ff;">ushort</span><span style="color: #008000;">&#40;</span>m<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
             <span style="color: #8a2be2;">StringSetCharacter</span><span style="color: #008000;">&#40;</span>f,1,<span style="color: #0000ff;">ushort</span><span style="color: #008000;">&#40;</span>d<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
             <span style="color: #8a2be2;">StringConcatenate</span><span style="color: #008000;">&#40;</span>res,res,f<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
            <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (m!=0)</span>
          else
            <span style="color: #0000ff;">break</span><span style="color: #008080;">;</span>                      
         <span style="color: #008000;">&#125;</span><span style="color: #808080;">//for (int i=0;i&lt;StringLen(s);i++)</span>
      <span style="color: #008000;">&#125;</span><span style="color: #808080;">//if (StringLen(s)&gt;0)</span>
   <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>res<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">string</span> UNICODE2ANSI<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">string</span> s<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">int</span> leng,ipos<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">uchar</span> m,d<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">ulong</span> big<span style="color: #008080;">;</span>
   leng<span style="color: #000080;">=</span><span style="color: #8a2be2;">StringLen</span><span style="color: #008000;">&#40;</span>s<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">string</span> unichar<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">string</span> res<span style="color: #000080;">=</span><span style="color: #008080;">&quot;&quot;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>leng<span style="color: #000040;">!</span><span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008000;">&#41;</span>
     <span style="color: #008000;">&#123;</span>    
      unichar<span style="color: #000080;">=</span><span style="color: #008080;">&quot; &quot;</span><span style="color: #008080;">;</span>
      ipos<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>      
      <span style="color: #0000ff;">while</span> <span style="color: #008000;">&#40;</span>ipos<span style="color: #000080;">&lt;</span>leng<span style="color: #008000;">&#41;</span>
        <span style="color: #008000;">&#123;</span> <span style="color: #808080;">//uchar typecasted because each double byte char is actually one byte</span>
         m<span style="color: #000080;">=</span><span style="color: #0000ff;">uchar</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">StringGetCharacter</span><span style="color: #008000;">&#40;</span>s,ipos<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
         <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>ipos<span style="color: #000040;">+</span>1<span style="color: #000080;">&lt;</span>leng<span style="color: #008000;">&#41;</span>
           d<span style="color: #000080;">=</span><span style="color: #0000ff;">uchar</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">StringGetCharacter</span><span style="color: #008000;">&#40;</span>s,ipos<span style="color: #000040;">+</span>1<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
         else
           d<span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
         big<span style="color: #000080;">=</span>d<span style="color: #000040;">*</span>256<span style="color: #000040;">+</span>m<span style="color: #008080;">;</span>                
         <span style="color: #8a2be2;">StringSetCharacter</span><span style="color: #008000;">&#40;</span>unichar,0,<span style="color: #0000ff;">ushort</span><span style="color: #008000;">&#40;</span>big<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>         
         <span style="color: #8a2be2;">StringConcatenate</span><span style="color: #008000;">&#40;</span>res,res,unichar<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>    
         ipos<span style="color: #000080;">=</span>ipos<span style="color: #000040;">+</span><span style="color: #008000;">2</span><span style="color: #008080;">;</span>
        <span style="color: #008000;">&#125;</span>
     <span style="color: #008000;">&#125;</span>
   <span style="color: #0000ff;">return</span><span style="color: #008000;">&#40;</span>res<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Cand folosesti biblioteca scrii simplu:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1414111"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p1414code111"><pre class="mql5" style="font-family:monospace;"><span style="color: #339900;">#include &lt;stringlib.mqh&gt;</span></pre></td></tr></table></div>

<p> ca in exemplul urmator:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1414112"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
</pre></td><td class="code" id="p1414code112"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//|                                                  teststrings.mq5 |</span>
<span style="color: #808080;">//|                                       Copyright Bogdan Caramalac |</span>
<span style="color: #808080;">//|                                           http://mqlmagazine.com |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #339900;">#property copyright &quot;Bogdan Caramalac&quot;</span>
<span style="color: #339900;">#property link      &quot;http://mqlmagazine.com&quot;</span>
<span style="color: #339900;">#property version   &quot;1.00&quot;</span>
&nbsp;
<span style="color: #339900;">#include &lt;stringlib.mqh&gt;</span>
&nbsp;
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//| Script program start function                                    |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #0000ff;">void</span> OnStart<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">string</span> original_unicode,ansi,converted_unicode<span style="color: #008080;">;</span>
   original_unicode<span style="color: #000080;">=</span><span style="color: #008080;">&quot;EvenString&quot;</span><span style="color: #008080;">;</span>
   ansi<span style="color: #000080;">=</span>UNICODE2ANSI<span style="color: #008000;">&#40;</span>original_unicode<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   converted_unicode<span style="color: #000080;">=</span>ANSI2UNICODE<span style="color: #008000;">&#40;</span>ansi<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span>original_unicode,<span style="color: #008080;">&quot; -&gt; &quot;</span>,ansi,<span style="color: #008080;">&quot; -&gt; &quot;</span>,converted_unicode<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   original_unicode<span style="color: #000080;">=</span><span style="color: #008080;">&quot;OddString&quot;</span><span style="color: #008080;">;</span>
   ansi<span style="color: #000080;">=</span>UNICODE2ANSI<span style="color: #008000;">&#40;</span>original_unicode<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   converted_unicode<span style="color: #000080;">=</span>ANSI2UNICODE<span style="color: #008000;">&#40;</span>ansi<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span>original_unicode,<span style="color: #008080;">&quot; -&gt; &quot;</span>,ansi,<span style="color: #008080;">&quot; -&gt; &quot;</span>,converted_unicode<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://mqlmagazine.com/ro/programarea-in-mql/iadul-dll-editia-mql5-unicode-vs-ansi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

