<?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 &#187; Programarea in MQL</title>
	<atom:link href="http://mqlmagazine.com/ro/category/programarea-in-mql/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>

<div class='dd_after'><table><tr><td><iframe src='http://digg.com/api/diggthis.php?w=new&amp;u=http://mqlmagazine.com/ro/programarea-in-mql/linii-directoar-pentru-scrierea-expertilor-de-portofoliu-in-mql5/&amp;t=Linii+directoare+pentru+scrierea+expertilor+de+portofoliu+in+MQL5&amp;s=compact' height='18' width='120' frameborder='0' scrolling='no'></iframe></td><td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://mqlmagazine.com/ro/programarea-in-mql/linii-directoar-pentru-scrierea-expertilor-de-portofoliu-in-mql5/&amp;title=Linii+directoare+pentru+scrierea+expertilor+de+portofoliu+in+MQL5&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></td><td><script type='text/javascript'><!--yahooBuzzArticleHeadline=Linii+directoare+pentru+scrierea+expertilor+de+portofoliu+in+MQL5;//--></script><script type='text/javascript' src='http://d.yimg.com/ds/badge2.js' badgetype='small-votes'></script></td><td><iframe src='http://api.tweetmeme.com/button.js?url=http://mqlmagazine.com/ro/programarea-in-mql/linii-directoar-pentru-scrierea-expertilor-de-portofoliu-in-mql5/&amp;source=&amp;style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></td><td><script type='text/javascript'> var fbShare = {url: 'http://mqlmagazine.com/ro/programarea-in-mql/linii-directoar-pentru-scrierea-expertilor-de-portofoliu-in-mql5/',size:'small'}</script> <script type='text/javascript' src='http://widgets.fbshare.me/files/fbshare.js'></script></td></tr></table></div><!-- Generated by Digg Digg plugin, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ -->]]></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>
<div class='dd_after'><table><tr><td><iframe src='http://digg.com/api/diggthis.php?w=new&amp;u=http://mqlmagazine.com/ro/programarea-in-mql/mql5-un-expert-demonstrativ-de-portofoliu-folosind-medii-mobile/&amp;t=MQL5+%3A+Un+expert+demonstrativ+de+portofoliu+folosind+medii+mobile&amp;s=compact' height='18' width='120' frameborder='0' scrolling='no'></iframe></td><td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://mqlmagazine.com/ro/programarea-in-mql/mql5-un-expert-demonstrativ-de-portofoliu-folosind-medii-mobile/&amp;title=MQL5+%3A+Un+expert+demonstrativ+de+portofoliu+folosind+medii+mobile&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></td><td><script type='text/javascript'><!--yahooBuzzArticleHeadline=MQL5+%3A+Un+expert+demonstrativ+de+portofoliu+folosind+medii+mobile;//--></script><script type='text/javascript' src='http://d.yimg.com/ds/badge2.js' badgetype='small-votes'></script></td><td><iframe src='http://api.tweetmeme.com/button.js?url=http://mqlmagazine.com/ro/programarea-in-mql/mql5-un-expert-demonstrativ-de-portofoliu-folosind-medii-mobile/&amp;source=&amp;style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></td><td><script type='text/javascript'> var fbShare = {url: 'http://mqlmagazine.com/ro/programarea-in-mql/mql5-un-expert-demonstrativ-de-portofoliu-folosind-medii-mobile/',size:'small'}</script> <script type='text/javascript' src='http://widgets.fbshare.me/files/fbshare.js'></script></td></tr></table></div><!-- Generated by Digg Digg plugin, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ -->]]></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>
<div class='dd_after'><table><tr><td><iframe src='http://digg.com/api/diggthis.php?w=new&amp;u=http://mqlmagazine.com/ro/programarea-in-mql/virtualizarea-sistemelor-de-trading-pentru-ajustarea-liniei-de-equity-un-mit/&amp;t=Virtualizarea+sistemelor+de+trading+pentru+ajustarea+liniei+de+equity+-+un+mit+%3F&amp;s=compact' height='18' width='120' frameborder='0' scrolling='no'></iframe></td><td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://mqlmagazine.com/ro/programarea-in-mql/virtualizarea-sistemelor-de-trading-pentru-ajustarea-liniei-de-equity-un-mit/&amp;title=Virtualizarea+sistemelor+de+trading+pentru+ajustarea+liniei+de+equity+-+un+mit+%3F&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></td><td><script type='text/javascript'><!--yahooBuzzArticleHeadline=Virtualizarea+sistemelor+de+trading+pentru+ajustarea+liniei+de+equity+-+un+mit+%3F;//--></script><script type='text/javascript' src='http://d.yimg.com/ds/badge2.js' badgetype='small-votes'></script></td><td><iframe src='http://api.tweetmeme.com/button.js?url=http://mqlmagazine.com/ro/programarea-in-mql/virtualizarea-sistemelor-de-trading-pentru-ajustarea-liniei-de-equity-un-mit/&amp;source=&amp;style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></td><td><script type='text/javascript'> var fbShare = {url: 'http://mqlmagazine.com/ro/programarea-in-mql/virtualizarea-sistemelor-de-trading-pentru-ajustarea-liniei-de-equity-un-mit/',size:'small'}</script> <script type='text/javascript' src='http://widgets.fbshare.me/files/fbshare.js'></script></td></tr></table></div><!-- Generated by Digg Digg plugin, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ -->]]></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>
<div class='dd_after'><table><tr><td><iframe src='http://digg.com/api/diggthis.php?w=new&amp;u=http://mqlmagazine.com/ro/programarea-in-mql/mql5-implementarea-unui-motor-cep-simplu/&amp;t=MQL5+%3A+Implementarea+unui+motor+CEP+simplu&amp;s=compact' height='18' width='120' frameborder='0' scrolling='no'></iframe></td><td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://mqlmagazine.com/ro/programarea-in-mql/mql5-implementarea-unui-motor-cep-simplu/&amp;title=MQL5+%3A+Implementarea+unui+motor+CEP+simplu&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></td><td><script type='text/javascript'><!--yahooBuzzArticleHeadline=MQL5+%3A+Implementarea+unui+motor+CEP+simplu;//--></script><script type='text/javascript' src='http://d.yimg.com/ds/badge2.js' badgetype='small-votes'></script></td><td><iframe src='http://api.tweetmeme.com/button.js?url=http://mqlmagazine.com/ro/programarea-in-mql/mql5-implementarea-unui-motor-cep-simplu/&amp;source=&amp;style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></td><td><script type='text/javascript'> var fbShare = {url: 'http://mqlmagazine.com/ro/programarea-in-mql/mql5-implementarea-unui-motor-cep-simplu/',size:'small'}</script> <script type='text/javascript' src='http://widgets.fbshare.me/files/fbshare.js'></script></td></tr></table></div><!-- Generated by Digg Digg plugin, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ -->]]></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>
<div class='dd_after'><table><tr><td><iframe src='http://digg.com/api/diggthis.php?w=new&amp;u=http://mqlmagazine.com/ro/programarea-in-mql/combinatorica-in-mql5/&amp;t=Combinatorica+in+MQL5&amp;s=compact' height='18' width='120' frameborder='0' scrolling='no'></iframe></td><td><iframe src='http://widgets.dzone.com/links/widgets/zoneit.html?url=http://mqlmagazine.com/ro/programarea-in-mql/combinatorica-in-mql5/&amp;title=Combinatorica+in+MQL5&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></td><td><script type='text/javascript'><!--yahooBuzzArticleHeadline=Combinatorica+in+MQL5;//--></script><script type='text/javascript' src='http://d.yimg.com/ds/badge2.js' badgetype='small-votes'></script></td><td><iframe src='http://api.tweetmeme.com/button.js?url=http://mqlmagazine.com/ro/programarea-in-mql/combinatorica-in-mql5/&amp;source=&amp;style=compact' height='20' width='90' frameborder='0' scrolling='no'></iframe></td><td><script type='text/javascript'> var fbShare = {url: 'http://mqlmagazine.com/ro/programarea-in-mql/combinatorica-in-mql5/',size:'small'}</script> <script type='text/javascript' src='http://widgets.fbshare.me/files/fbshare.js'></script></td></tr></table></div><!-- Generated by Digg Digg plugin, 
    Author : Yong Mook Kim
    Website : http://www.mkyong.com/blog/digg-digg-wordpress-plugin/ -->]]></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>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,
