<?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, caci acesta este unicul mod prin care trimiterea sirurilor este posibila in C++.</p>
<p>Intrucat C++ a castigat batalia, compilatorul Pascal a trebuit sa se adapteze, si conventia de apelare a fost o sarcina usoara. Cat despre siruri, problema s-a complicat, iar programatorii au trebuit sa se chinuie cu PCHAR, un nume dat tablourilor fixe de cate un byte pe element, care trebuia sa tina siruri C++ terminate cu null care erau trimise prin referinta.</p>
<p>Ca si cum nu era de-ajuns, <strong>a aparut standardul UNICODE</strong>.</p>
<p>UNICODE este un standard complicat, si nici eu nu-l cunosc in intregime. Diferenta dintre ANSI si UNICODE e aceea ca in UNICODE caracterele sunt mai largi, se intind pe doi bytes fiecare, dar sunt si siruri cu caracterele codate pe 4 bytes. La inceput, sirurile UNICODE pareau ceva nou si ciudat. De aceea, erau numite <strong>siruri largi</strong> (<em>wide strings</em>). Functiile Windows API care lucrau cu sirurile largi aveau numele terminat in W ; pointerii la siruri ANSI terminate cu null se numeau <strong>char*</strong> , iar pointerii la siruri UNICODE au trebuit sa fie numite <strong>wchar_t*</strong>. Cum UNICODE a devenit standard general in timp, acum sirurile UNICODE sunt numite simplu <strong>siruri terminate cu null</strong>.</p>
<p><strong>Siruri terminate cu null (UNICODE)</strong></p>
<pre>
|------------------------------------------|
|  c1 |  c2 |....|      cn   |      0      |
|b1|b2|b3|b4|....|b 2n-1|b 2n|b 2n+1|b 2n+2|
|------------------------------------------|
</pre>
<p>MQL5, ca majoritatea mediilor de programare din prezent, este UNICODE. Chiar si sirurile simple pe care le folosesti in mod regulat sunt UNICODE. Arata ca si cum ar fi ANSI, dar reprezentarea interna e UNICODE. Aceasta din cauza ca ANSI poate fi impachetat in UNICODE, prin umplerea bytes complementari cu 0.</p>
<p><strong>ANSI impachetat in UNICODE (siruri normale MQL5)</strong></p>
<pre>
|------------------------------------------|
|  c1 |  c2 |....|      cn   |      0      |
|b1|0 |b3|0 |....|b 2n-1| 0  |b 2n+1|  0   |
|b1|b2|b3|b4|....|b 2n-1|b 2n|b 2n+1|b 2n+2|
|------------------------------------------|
</pre>
<p>Deci, intr-un sir ANSI impachetat in UNCODE, fiecare byte par este 0.<br />
Dar daca ai un DLL C++ mai vechi, care foloseste siruri <strong>ANSI</strong> terminate cu null.<br />
Aceasta inseamna ca se asteapta si intoarce siruri ANSI terminate cu null.</p>
<p>Deci, daca trimiti un sir &#8220;ABC&#8221; catre un asemenea DLL, vei avea mapat in bytes : 65, 0, 66, 0, 67, 0.<br />
DLL-ul va vedea primul 0 ca si null-ul care termina sirul si va intelege doar &#8220;A&#8221; din tot sirul.</p>
<p>Daca e sa primesti &#8220;ABC&#8221; din acest tip de DLL, vei primi in bytes : 65, 66, 67, 0.<br />
MQL5, fiind UNICODE, va intelege primul caracter ca 65 si 66 (ceva ce pare in chineza) si al doilea caracter ca 67 si 0, mapandu-l in &#8220;C&#8221;. Apoi va continua sa citeasca, daca nu e nici o eroare <strong>access violation</strong> pana cand gaseste 0 si 0, care formeaza null-ul, rezultand intr-o pasareasca de neinteles. Eroarrea access violation ar putea sa fie ocolita pentru ca MT5 ar putea aloca suficient spatiu pentru primirea sir.</p>
<p>Din pacate, MQL5 nu are un tip <strong>ansistring</strong> care sa se ocupe de conversie automat. Totusi, pe partea buna a problemei, cel putin in ambele cazuri sirurile sunt trimise prin referinta, deci e doar o problema de semnificatie decat una de conflict in trimiterea prin valoare sau referinta.</p>
<p>Aceasta inseamna ca trebuie sa trimiti siruri UNICODE care trebuie sa fie decodate corect ca ANSI, si sa primesti siruri ANSI pe care trebuie sa le convertesti la UNICODE pentru a le folosi.</p>
<p>Cand primesti un sir ANSI intr-o forma UNICODE, incepi citirea caracterelor UNICODE, printr-un typecast al fiecarui caracter intr-un <strong>unsigned short</strong>, apoi imparti acesta in doua ANSI (prin modulo 256), adaugand apoi la UNICODE-ul rezultant mai intai restul (ca si cod ANSI) , si apoi catul (ca si cod ANSI). Asa ca fiecare 2 bytes din ANSI original se mapeaza in 4 bytes (2 caractere UNICODE). </p>
<p>Cand vrei sa impachetezi un UNICODE codat ca ANSI, ca un sir MQL5, ca si ANSI, trebuie sa citesti fiecare doua caractere UNICODE la rand, si fortezi typecast-ul lor in <strong>unsigned char</strong>, de marimea caracterelor ANSI. Apoi impachetezi noul caracter UNICODE cu primul citit ca rest si al doilea ca si cat intr-un <strong>unsigned short</strong> mai mare, care se va adauga ca si cod al noului caracter la noul sir rezultant UNICODE. </p>
<p>Ceea ce urmeaza este codul celor doua functii de conversie, scrise ca o <strong>biblioteca</strong>. Fii atent cand faci acest fisier, sa fie in folderul <strong>include</strong>, si sa-l salvezi ca <strong>stringlib.mqh</strong>.</p>

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

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

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

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

<div class="wp_codebox"><table width="100%" ><tr id="p1414108"><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="p1414code108"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//|                                                  teststrings.mq5 |</span>
<span style="color: #808080;">//|                                       Copyright Bogdan Caramalac |</span>
<span style="color: #808080;">//|                                           http://mqlmagazine.com |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #339900;">#property copyright &quot;Bogdan Caramalac&quot;</span>
<span style="color: #339900;">#property link      &quot;http://mqlmagazine.com&quot;</span>
<span style="color: #339900;">#property version   &quot;1.00&quot;</span>
&nbsp;
<span style="color: #339900;">#include &lt;stringlib.mqh&gt;</span>
&nbsp;
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//| Script program start function                                    |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #0000ff;">void</span> OnStart<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
   <span style="color: #0000ff;">string</span> original_unicode,ansi,converted_unicode<span style="color: #008080;">;</span>
   original_unicode<span style="color: #000080;">=</span><span style="color: #008080;">&quot;EvenString&quot;</span><span style="color: #008080;">;</span>
   ansi<span style="color: #000080;">=</span>UNICODE2ANSI<span style="color: #008000;">&#40;</span>original_unicode<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   converted_unicode<span style="color: #000080;">=</span>ANSI2UNICODE<span style="color: #008000;">&#40;</span>ansi<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span>original_unicode,<span style="color: #008080;">&quot; -&gt; &quot;</span>,ansi,<span style="color: #008080;">&quot; -&gt; &quot;</span>,converted_unicode<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   original_unicode<span style="color: #000080;">=</span><span style="color: #008080;">&quot;OddString&quot;</span><span style="color: #008080;">;</span>
   ansi<span style="color: #000080;">=</span>UNICODE2ANSI<span style="color: #008000;">&#40;</span>original_unicode<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   converted_unicode<span style="color: #000080;">=</span>ANSI2UNICODE<span style="color: #008000;">&#40;</span>ansi<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span>original_unicode,<span style="color: #008080;">&quot; -&gt; &quot;</span>,ansi,<span style="color: #008080;">&quot; -&gt; &quot;</span>,converted_unicode<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span></pre></td></tr></table></div>

<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/iadul-dll-editia-mql5-unicode-vs-ansi/&amp;t=Iadul+DLL%2C+editia+MQL5+%3A+UNICODE+vs+ANSI&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/iadul-dll-editia-mql5-unicode-vs-ansi/&amp;title=Iadul+DLL%2C+editia+MQL5+%3A+UNICODE+vs+ANSI&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></td><td><script type='text/javascript'><!--yahooBuzzArticleHeadline=Iadul+DLL%2C+editia+MQL5+%3A+UNICODE+vs+ANSI;//--></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/iadul-dll-editia-mql5-unicode-vs-ansi/&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/iadul-dll-editia-mql5-unicode-vs-ansi/',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/iadul-dll-editia-mql5-unicode-vs-ansi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MQL5 : Conectarea la MySQL</title>
		<link>http://mqlmagazine.com/ro/programarea-in-mql/mql5-conectarea-la-mysql/</link>
		<comments>http://mqlmagazine.com/ro/programarea-in-mql/mql5-conectarea-la-mysql/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 19:36:04 +0000</pubDate>
		<dc:creator>Bogdan Baltatu, MQLmagazine editor</dc:creator>
				<category><![CDATA[Programarea in MQL]]></category>

		<guid isPermaLink="false">http://mqlmagazine.com/ro/?p=1353</guid>
		<description><![CDATA[[English version] [MQLmagazine.com in english] [Editia romaneasca]
Acest articol este dedicat trimiterii de date din MQL5 catre o baza de date MySQL. Articolul este totodata o exemplificare a functiilor de conversie UNICODE/ANSI prezentate in articolul Iadul DLL, editia MQL5 : UNICODE vs ANSI.
Principalele avantaje ale colectarii datelor in baze de date MySQL ar fi: interogarea datelor, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mqlmagazine.com/mql-programming/mql5-connecting-to-mysql/" 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>Acest articol este dedicat trimiterii de date din MQL5 catre o baza de date MySQL. Articolul este totodata o exemplificare a functiilor de conversie UNICODE/ANSI prezentate in articolul <a href="http://mqlmagazine.com/ro/programarea-in-mql/iadul-dll-editia-mql5-unicode-vs-ansi/" target="_top">Iadul DLL, editia MQL5 : UNICODE vs ANSI</a>.<br />
Principalele avantaje ale colectarii datelor in baze de date MySQL ar fi: interogarea datelor, detinerea unor cantitati mari de date intr-un spatiu mai mic. De exemplu tranzactiile stocate intr-o baza de date ocupa probabil sub 10% decat intr-un fisier HTML.<br />
Totusi, dezavantajul principal e ca un asemenea export se face pentru a analiza datele pe o alta platforma sau chiar pe platforme scrise manual, care necesita timp mare de dezvoltare si sunt expuse erorilor ascunse &#8211; fie in conceptie, fie in programare.</p>
<p>In primul rand trebuie sa aveti instalat serverul MySQL si un conector. Pentru functionarea codului de mai jos trebuie permis din platforma importul de dll-uri si sa puneti biblioteca libmysql.dll in folderul &#8216;libraries&#8217;. Am avut o problema cu un libmysql.dll pe 64 de biti. Probleme de dependente, probabil si de import (in mod normal o aplicatie pe 32 de biti nu poate importa un dll pe 64 de biti). Ca sa scapati de problemele aduse de biblioteca pe 64 biti va sfatuim sa folositi o biblioteca pentru sisteme pe baza de 32 biti.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1353110"><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
</pre></td><td class="code" id="p1353code110"><pre class="mql5" style="font-family:monospace;"><span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//|                                                 Mysql-Sample.mq5 |</span>
<span style="color: #808080;">//|                                          Copyright Bogdan Baltatu|</span>
<span style="color: #808080;">//|                                           http://mqlmagazine.com |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #339900;">#property copyright &quot;Bogdan Baltatu&quot;</span>
<span style="color: #339900;">#property link      &quot;http://mqlmagazine.com&quot;</span>
<span style="color: #339900;">#property version   &quot;1.00&quot;</span>
&nbsp;
<span style="color: #339900;">#include &lt;stringlib.mqh&gt;</span>
&nbsp;
<span style="color: #339900;">#import &quot;libmysql.dll&quot;</span>
   <span style="color: #0000ff;">int</span> mysql_init<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> db<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> mysql_errno<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> TMYSQL<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> mysql_real_connect<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> TMYSQL, <span style="color: #0000ff;">string</span><span style="color: #000040;">&amp;</span> host, <span style="color: #0000ff;">string</span><span style="color: #000040;">&amp;</span> user, <span style="color: #0000ff;">string</span><span style="color: #000040;">&amp;</span> password,
                           <span style="color: #0000ff;">string</span><span style="color: #000040;">&amp;</span> DB,<span style="color: #0000ff;">int</span> port,<span style="color: #0000ff;">int</span> socket,<span style="color: #0000ff;">int</span> clientflag<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> mysql_real_query<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> TMYSQL,<span style="color: #0000ff;">string</span><span style="color: #000040;">&amp;</span> query,<span style="color: #0000ff;">int</span> lenght<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">void</span> mysql_close<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> TMSQL<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>                        
   <span style="color: #0000ff;">string</span> mysql_error<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> TMYSQL<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #808080;">//string is ansi</span>
<span style="color: #339900;">#import</span>
&nbsp;
<span style="color: #0000ff;">string</span> MySqlHost   <span style="color: #000080;">=</span><span style="color: #008080;">&quot;localhost&quot;</span><span style="color: #008080;">;</span> <span style="color: #808080;">//MySql Host:</span>
<span style="color: #0000ff;">string</span> MySqlUser   <span style="color: #000080;">=</span><span style="color: #008080;">&quot;user&quot;</span><span style="color: #008080;">;</span>     <span style="color: #808080;">//MySQL User:</span>
<span style="color: #0000ff;">string</span> MySqlPass   <span style="color: #000080;">=</span><span style="color: #008080;">&quot;passpass&quot;</span><span style="color: #008080;">;</span>      <span style="color: #808080;">//MySQL Password:</span>
<span style="color: #0000ff;">string</span> MySqlDB     <span style="color: #000080;">=</span><span style="color: #008080;">&quot;forex&quot;</span><span style="color: #008080;">;</span>     <span style="color: #808080;">//MySQL Table:</span>
<span style="color: #0000ff;">int</span>    MySqlPort   <span style="color: #000080;">=</span><span style="color: #008000;">3306</span><span style="color: #008080;">;</span>        <span style="color: #808080;">//MySQL Port:</span>
<span style="color: #0000ff;">string</span> MySqlSocket <span style="color: #000080;">=</span><span style="color: #008080;">&quot;&quot;</span><span style="color: #008080;">;</span>          <span style="color: #808080;">//MySQL Socket:</span>
<span style="color: #0000ff;">input</span> <span style="color: #0000ff;">int</span>    MySqlFlag   <span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>           <span style="color: #808080;">//MySQL Flag:</span>
<span style="color: #0000ff;">int</span> mysql   <span style="color: #000080;">=</span><span style="color: #008000;">0</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">string</span> query<span style="color: #000080;">=</span><span style="color: #008080;">&quot;&quot;</span><span style="color: #008080;">;</span>
MqlTick tick<span style="color: #008080;">;</span>
&nbsp;
&nbsp;
&nbsp;
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #808080;">//| Expert initialization function                                   |</span>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
&nbsp;
<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> host,user,pass,DB<span style="color: #008080;">;</span>
   <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">MQL5InfoInteger</span><span style="color: #008000;">&#40;</span><span style="color: #333399;">MQL5_DLLS_ALLOWED</span><span style="color: #008000;">&#41;</span><span style="color: #000080;">==</span>0<span style="color: #008000;">&#41;</span>
      <span style="color: #008000;">&#123;</span>
        <span style="color: #8a2be2;">Alert</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;Apelarea DLL este interzisa. Permiteti si reincercati!&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
      <span style="color: #008000;">&#125;</span>
   mysql<span style="color: #000080;">=</span>mysql_init<span style="color: #008000;">&#40;</span>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;obiectul mysql=&quot;</span>,mysql<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   host<span style="color: #000080;">=</span>UNICODE2ANSI<span style="color: #008000;">&#40;</span>MySqlHost<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   user<span style="color: #000080;">=</span>UNICODE2ANSI<span style="color: #008000;">&#40;</span>MySqlUser<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   pass<span style="color: #000080;">=</span>UNICODE2ANSI<span style="color: #008000;">&#40;</span>MySqlPass<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   DB<span style="color: #000080;">=</span>UNICODE2ANSI<span style="color: #008000;">&#40;</span>MySqlDB<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">int</span> res<span style="color: #000080;">=</span>mysql_real_connect<span style="color: #008000;">&#40;</span>mysql,host,user,pass,DB,MySqlPort,MySqlSocket,MySqlFlag<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;rezultat conectare=&quot;</span>,res<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>res<span style="color: #000080;">==</span>mysql<span style="color: #008000;">&#41;</span>
      <span style="color: #8a2be2;">Print</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;Conectarea la serverul MySQL reusita!&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   else
     <span style="color: #008000;">&#123;</span> 
      <span style="color: #0000ff;">string</span> s<span style="color: #008080;">;</span>
      s<span style="color: #000080;">=</span>mysql_error<span style="color: #008000;">&#40;</span>mysql<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;Eroare de conectare = &quot;</span>,ANSI2UNICODE<span style="color: #008000;">&#40;</span>s<span style="color: #008000;">&#41;</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> 
   <span style="color: #808080;">//Create table</span>
   <span style="color: #8a2be2;">StringConcatenate</span><span style="color: #008000;">&#40;</span>query,<span style="color: #008080;">&quot;CREATE TABLE IF NOT EXISTS &quot;</span>,<span style="color: #ff00ff;">_Symbol</span>,<span style="color: #008080;">&quot; (time VARCHAR(30) ,BID double,ASK double)&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   sql_query<span style="color: #008000;">&#40;</span>query<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>
<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>
   mysql_close<span style="color: #008000;">&#40;</span>mysql<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #808080;">//Close connection</span>
   <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
<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: #8a2be2;">SymbolInfoTick</span><span style="color: #008000;">&#40;</span><span style="color: #ff00ff;">_Symbol</span>,tick<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   <span style="color: #8a2be2;">StringConcatenate</span><span style="color: #008000;">&#40;</span>query,<span style="color: #008080;">&quot;INSERT INTO &quot;</span>,<span style="color: #8a2be2;">Symbol</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,<span style="color: #008080;">&quot; (time,ask,bid) VALUES ('&quot;</span>,tick.<span style="color: #007788;">time</span>,<span style="color: #008080;">&quot;',&quot;</span>,tick.<span style="color: #007788;">ask</span>,<span style="color: #008080;">&quot;,&quot;</span>,tick.<span style="color: #007788;">bid</span>,<span style="color: #008080;">&quot;)&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   sql_query<span style="color: #008000;">&#40;</span>query<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>
<span style="color: #808080;">//+------------------------------------------------------------------+</span>
<span style="color: #0000ff;">void</span> sql_query<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">string</span> _query<span style="color: #008000;">&#41;</span>
  <span style="color: #008000;">&#123;</span>
    <span style="color: #0000ff;">string</span> ansiquery<span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> length<span style="color: #000080;">=</span><span style="color: #8a2be2;">StringLen</span><span style="color: #008000;">&#40;</span>_query<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    ansiquery<span style="color: #000080;">=</span>UNICODE2ANSI<span style="color: #008000;">&#40;</span>_query<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    mysql_real_query<span style="color: #008000;">&#40;</span>mysql,ansiquery,length<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">int</span> mysqlerr<span style="color: #000080;">=</span>mysql_errno<span style="color: #008000;">&#40;</span>mysql<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>mysqlerr<span style="color: #000080;">&gt;</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;La interogarea: &quot;</span>,_query<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;Eroare: &quot;</span>,ANSI2UNICODE<span style="color: #008000;">&#40;</span>mysql_error<span style="color: #008000;">&#40;</span>mysql<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>      
    <span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span></pre></td></tr></table></div>

<p>Intre liniile 9 si 17 declaram functiile pe care le importam din libmysql.dll . Fiind un exemplu am importat doar 6 functii. Pentru aprofundarea functiilor folositi <a href="http://dev.mysql.com/doc/refman/5.5/en/c-api-function-overview.html" target="_top">documentatia mysql</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-conectarea-la-mysql/&amp;t=MQL5+%3A+Conectarea+la+MySQL&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-conectarea-la-mysql/&amp;title=MQL5+%3A+Conectarea+la+MySQL&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></td><td><script type='text/javascript'><!--yahooBuzzArticleHeadline=MQL5+%3A+Conectarea+la+MySQL;//--></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-conectarea-la-mysql/&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-conectarea-la-mysql/',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-conectarea-la-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lucrul cu fisiere. Partea a IV-a</title>
		<link>http://mqlmagazine.com/ro/programarea-in-mql/lucru-cu-fisiere-partea-a-iv-a/</link>
		<comments>http://mqlmagazine.com/ro/programarea-in-mql/lucru-cu-fisiere-partea-a-iv-a/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 19:35:48 +0000</pubDate>
		<dc:creator>Bogdan Baltatu, MQLmagazine editor</dc:creator>
				<category><![CDATA[Programarea in MQL]]></category>

		<guid isPermaLink="false">http://mqlmagazine.com/ro/?p=1130</guid>
		<description><![CDATA[[English version] [MQLmagazine.com in english] [Editia romaneasca]
Acesta este ultimul articol din seria &#8216;Lucrul cu fisiere&#8217; si el va trata exclusiv functiile de citire din din fisiere. Functiile care se ocupa cu citirea din fisiere sunt :

1
2
FileReadArray&#40;&#41;, FileReadBool&#40;&#41;, FileReadDatetime&#40;&#41;, FileReadDouble&#40;&#41;, FileReadFloat&#40;&#41;,
FileReadInteger&#40;&#41;, FileReadLong&#40;&#41;, FileReadNumber&#40;&#41;, FileReadString&#40;&#41;, FileReadStruct&#40;&#41;

FileReadArray()
Functia citeste dintr-un fisier BIN tablouri de orice tip cu exceptia string. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mqlmagazine.com/mql-programming/working-with-files-part-iv/" 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>Acesta este ultimul articol din seria &#8216;Lucrul cu fisiere&#8217; si el va trata exclusiv functiile de citire din din fisiere. Functiile care se ocupa cu citirea din fisiere sunt :</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1130130"><td class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p1130code130"><pre class="mql5" style="font-family:monospace;"><span style="color: #8a2be2;">FileReadArray</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, <span style="color: #8a2be2;">FileReadBool</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, <span style="color: #8a2be2;">FileReadDatetime</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, <span style="color: #8a2be2;">FileReadDouble</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, <span style="color: #8a2be2;">FileReadFloat</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,
<span style="color: #8a2be2;">FileReadInteger</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, <span style="color: #8a2be2;">FileReadLong</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, <span style="color: #8a2be2;">FileReadNumber</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, <span style="color: #8a2be2;">FileReadString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, <span style="color: #8a2be2;">FileReadStruct</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span></pre></td></tr></table></div>

<p><strong>FileReadArray()</strong></p>
<p>Functia citeste dintr-un fisier BIN tablouri de orice tip cu exceptia string. Prototipul functiei este:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1130131"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p1130code131"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">uint</span>  <span style="color: #8a2be2;">FileReadArray</span><span style="color: #008000;">&#40;</span>
 <span style="color: #0000ff;">int</span>  file_handle                            <span style="color: #808080;">// Referinta fisierului</span>
 <span style="color: #0000ff;">void</span>  array<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span>,                              <span style="color: #808080;">// Tabloul in care citim</span>
 <span style="color: #0000ff;">int</span>   start_item<span style="color: #000080;">=</span><span style="color: #008000;">0</span>,                       <span style="color: #808080;">// Pozitia de la care se incepe citirea</span>
 <span style="color: #0000ff;">int</span>   items_count<span style="color: #000080;">=</span>WHOLE_ARRAY    <span style="color: #808080;">// Numarul de elemente pe care vrem sa il citim</span>
<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Parametrii functiei sunt : referinta fisierului, tabloul in care citim, pozitia de unde incep citirea si numarul de elemente care vreau sa fie citit. Rezultatul functiei este numarul de elemente citite.</p>
<p>Exemplu de cod:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1130132"><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code" id="p1130code132"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">double</span> b<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> fh<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileOpen</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;test.bin&quot;</span>,<span style="color: #333399;">FILE_BIN</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_READ</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_WRITE</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileWriteDouble</span><span style="color: #008000;">&#40;</span>fh,5.123<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileWriteDouble</span><span style="color: #008000;">&#40;</span>fh,1.2123<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileSeek</span><span style="color: #008000;">&#40;</span>fh,0,<span style="color: #333399;">SEEK_SET</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileReadArray</span><span style="color: #008000;">&#40;</span>fh,b,0,WHOLE_ARRAY<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileClose</span><span style="color: #008000;">&#40;</span>fh<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Am preferat sa scriu in fisierul bin folosindu-ma de FileWriteDouble() (liniile 3 si 4) cand puteam folosi FileWriteArray() , deoarece am vrut ca tu , cititorule sa poti sa te joci cu codul si sa poti sa tragi concluziile pe care ti le voi expune.</p>
<p>Pe linia 5 am apelat functia <em>FileSeek()</em> deoarece daca faceam imediat citirea cursorul era la sfarsitul fisierului si functia nu ar mai fi citit nici un element nemaiavand ce sa mai citeasca , asadar inainte de a folosi functia FileReadArray() asigurati-va ca pozitia cursorului este in locul dorit.</p>
<p>Tipul tabloului trebuie sa coincida cu tipul elementelor pe care dorim sa le citim. De exemplu daca am scris in fisier cu FileWriteDouble() , tabloul in care in ajung datele citite cu FileReadArray() trebuie sa fie de tip double. Daca nu este, datele vor fi alterate in functie de tipul matricei b ; in cazul nostru functia citeste seturi de cate 8 bytes , deoarece un numar double se scrie pe 8 bytes.</p>
<p>Scrieti un element cu FileWriteDouble() si unul cu FileWriteInteger() si faceti citirea intr-un tablou de tip double sa vedeti ce se intampla. Dupa ce o sa faceti asta o sa ajungeti la concluzia ca este mai bine intr-un fisier sa folositi un singur fel de functie pentru scriere si tabloul sau structura in care faceti citirea sa fie de acelasi tip cu elementele scrise.</p>
<p>Mare atentie la pozitia cursorului!!<br />
Va readuc aminte ca intr-un tablou primul element se gaseste pe pozitia 0 , deci in cazul nostru primul element o sa fie b[0] si al doilea b[1].</p>
<p><strong>FileReadBool()</strong></p>
<p>Prototipul functiei este:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1130133"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p1130code133"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">bool</span>  <span style="color: #8a2be2;">FileReadBool</span><span style="color: #008000;">&#40;</span>
   <span style="color: #0000ff;">int</span>  file_handle    <span style="color: #808080;">// Referinta fisierului</span>
   <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Functia citeste dintr-un fisier CSV un string si il converteste in boolean; false daca citeste 0, true pentru orice altceva.</p>
<p><strong>FileReadDatetime()</strong></p>
<p>Functia citeste dintr-un fisier CSV un string in unul din formatele:  &#8220;YYYY.MM.DD HH:MI:SS&#8221;, &#8220;YYYY.MM.DD&#8221; sau &#8220;HH:MI:SS&#8221; si le converteste intr-o valoare de tip datetime. Prototipul functiei este:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1130134"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code" id="p1130code134"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">datetime</span>  <span style="color: #8a2be2;">FileReadDatetime</span><span style="color: #008000;">&#40;</span>
 <span style="color: #0000ff;">int</span>  file_handle    <span style="color: #808080;">// Referinta fisierului</span>
<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
Functia are un singur parametru si anume referinta fisierului data de functia <span style="color: #8a2be2;">FileOpen</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>.
&nbsp;
<span style="color: #007788;">Exemplu</span> de cod<span style="color: #008080;">:</span>
&nbsp;
<span style="color: #000080;">&lt;</span>pre lang<span style="color: #000080;">=</span><span style="color: #008080;">&quot;mql5&quot;</span><span style="color: #000080;">&gt;</span><span style="color: #0000ff;">int</span> fh<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileOpen</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;test.csv&quot;</span>,<span style="color: #333399;">FILE_CSV</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_READ</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_WRITE</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileWrite</span><span style="color: #008000;">&#40;</span>fh,<span style="color: #008080;">&quot;asd 12:54 06:00&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileSeek</span><span style="color: #008000;">&#40;</span>fh,0,<span style="color: #333399;">SEEK_SET</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">datetime</span> dt<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileReadDatetime</span><span style="color: #008000;">&#40;</span>fh<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileClose</span><span style="color: #008000;">&#40;</span>fh<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Observati pe linia 2 ca am scris in acelasi string doua substringuri care pot fi interpretate si convertite ca data (&#8220;12:54&#8243; si &#8220;06:00&#8243;).Functia citeste intotdeaua primul string care poate fi convertit in data de la pozitia curenta a cursorului si il converteste intr-o variabila de tip data.</p>
<p>Daca data noastra este de forma HH:MM atunci dt va lua valoarea : &#8220;YYYY.MM.DD 12:54&#8243; , unde YYYY.MM.DD este data curenta.</p>
<p><strong>FileReadDouble()</strong></p>
<p>Functia citeste un numar de tip double dintr-un fisier BIN de la pozitia curenta a cursorului. Prototipul functiei este:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1130135"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p1130code135"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">double</span>  <span style="color: #8a2be2;">FileReadDouble</span><span style="color: #008000;">&#40;</span>
 <span style="color: #0000ff;">int</span>  file_handle    <span style="color: #808080;">// Referinta fisierului</span>
<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Functia are un singur parametru si anume referinta fisierului intoarsa de FileOpen() si rezultatul functiei este un numar de tip Double.</p>
<p>Exemplu de cod:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1130136"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p1130code136"><pre class="mql5" style="font-family:monospace;"> <span style="color: #0000ff;">int</span> fh<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileOpen</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;test.bin&quot;</span>,<span style="color: #333399;">FILE_BIN</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_READ</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_WRITE</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileWriteDouble</span><span style="color: #008000;">&#40;</span>fh,1.1234<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileWriteDouble</span><span style="color: #008000;">&#40;</span>fh,0.0123<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileSeek</span><span style="color: #008000;">&#40;</span>fh,8,<span style="color: #333399;">SEEK_SET</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">double</span> dvalue<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileReadDouble</span><span style="color: #008000;">&#40;</span>fh<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> 
<span style="color: #8a2be2;">FileClose</span><span style="color: #008000;">&#40;</span>fh<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Am scris doua valori de tip double in fisier.Daca ne &#8216;jucam&#8217; cu al doilea parametru al functiei <em>FileSeek()</em> o sa observam ca numarul difera de cel introdus deoarece functia citeste 8 bytes de la pozitia cursorului si numarul intors de functia FileReadDouble() va fi diferit de ce scris.</p>
<p><strong>FileReadFloat()</strong></p>
<p>Functia citeste un numar float dintr-un fisier BIN. Prototipul functiei este:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1130137"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p1130code137"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">float</span>  <span style="color: #8a2be2;">FileReadFloat</span><span style="color: #008000;">&#40;</span>
 <span style="color: #0000ff;">int</span>  file_handle    <span style="color: #808080;">// Referinta fisierului</span>
<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Functia are un singur parametru si anume referinta fisierului data de functia FileOpen().</p>
<p>Exemplu de cod:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1130138"><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p1130code138"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">int</span> fh<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileOpen</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;test.bin&quot;</span>,<span style="color: #333399;">FILE_BIN</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_READ</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_WRITE</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileWriteFloat</span><span style="color: #008000;">&#40;</span>fh,0.3f<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileSeek</span><span style="color: #008000;">&#40;</span>fh,0,<span style="color: #333399;">SEEK_SET</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">float</span> fvalue<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileReadFloat</span><span style="color: #008000;">&#40;</span>fh<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileClose</span><span style="color: #008000;">&#40;</span>fh<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Aceleasi precizari ca la functiile de mai sus: atentie la pozitia cursorului!!</p>
<p><strong>FileReadInteger()</strong></p>
<p>Functia citeste un integer , short sau char de la pozitia curenta a pointerului in functie la lungimea in bytes specificata. Prototipul functiei este:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1130139"><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p1130code139"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">int</span>  <span style="color: #8a2be2;">FileReadInteger</span><span style="color: #008000;">&#40;</span>
 <span style="color: #0000ff;">int</span>  file_handle         <span style="color: #808080;">// Referinta fisierului</span>
 <span style="color: #0000ff;">int</span>  size<span style="color: #000080;">=</span>INT_VALUE      <span style="color: #808080;">// Marimea unui intreg in bytes</span>
<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Parametrii functiei sunt referinta fisierului intoarsa de FileOpen() si numarul de bytes care pe care o sa il citim de la pozitia curenta a cursorului. (1 pentru char , 2 pentru short , 4 pentru int)</p>
<p>Exemplu de cod:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1130140"><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p1130code140"><pre class="mql5" style="font-family:monospace;"> <span style="color: #0000ff;">int</span> fh<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileOpen</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;test.bin&quot;</span>,<span style="color: #333399;">FILE_BIN</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_READ</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_WRITE</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileWriteInteger</span><span style="color: #008000;">&#40;</span>fh,15867,4<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileSeek</span><span style="color: #008000;">&#40;</span>fh,0,<span style="color: #333399;">SEEK_SET</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> ivalue<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileReadInteger</span><span style="color: #008000;">&#40;</span>fh,4<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileClose</span><span style="color: #008000;">&#40;</span>fh<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Chiar daca ma repet mai adaug o data : atentie la pozitia cursorului si atentie la numarul de bytes pe care il citesti!</p>
<p><strong>FileReadLong()</strong></p>
<p>Functia citeste un intreg de tip long (8 bytes) de la pozitia curenta a unui fisier deschis ca BIN. Prototipul functiei este:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1130141"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p1130code141"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">long</span>  <span style="color: #8a2be2;">FileReadLong</span><span style="color: #008000;">&#40;</span>
 <span style="color: #0000ff;">int</span>  file_handle    <span style="color: #808080;">// Referinta fisierului</span>
<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Parametrul functiei este referinta fisierului intors de functia FileOpen().</p>
<p>Exemplu de cod:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1130142"><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p1130code142"><pre class="mql5" style="font-family:monospace;"><span style="color: #000080;">&lt;</span>pre lang<span style="color: #000080;">=</span><span style="color: #008080;">&quot;mql5&quot;</span><span style="color: #000080;">&gt;</span> <span style="color: #0000ff;">int</span> fh<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileOpen</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;test.bin&quot;</span>,<span style="color: #333399;">FILE_BIN</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_READ</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_WRITE</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileWriteInteger</span><span style="color: #008000;">&#40;</span>fh,15867,8<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileSeek</span><span style="color: #008000;">&#40;</span>fh,0,<span style="color: #333399;">SEEK_SET</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> ivalue<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileReadLong</span><span style="color: #008000;">&#40;</span>fh<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileClose</span><span style="color: #008000;">&#40;</span>fh<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p><strong>FileReadNumber()</strong></p>
<p>Functia citeste dintr-un CSV un string de la pozitia curenta pana cand se intalneste separatorul si converteste string-ul intr-un double. Prototipul functiei este:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1130143"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p1130code143"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">double</span>  <span style="color: #8a2be2;">FileReadNumber</span><span style="color: #008000;">&#40;</span>
 <span style="color: #0000ff;">int</span>  file_handle    <span style="color: #808080;">// Referinta fisierului.</span>
<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Functia are un singur parametru si anume referinta fisierului intoarsa de functia FileOpen().</p>
<p>Exemplu de cod:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1130144"><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p1130code144"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">int</span> fh<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileOpen</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;test.csv&quot;</span>,<span style="color: #333399;">FILE_CSV</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_READ</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_WRITE</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileWrite</span><span style="color: #008000;">&#40;</span>fh,1.2<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileSeek</span><span style="color: #008000;">&#40;</span>fh,0,<span style="color: #333399;">SEEK_SET</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">double</span> dvalue<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileReadNumber</span><span style="color: #008000;">&#40;</span>fh<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileClose</span><span style="color: #008000;">&#40;</span>fh<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Daca pe linia 2 scriam in loc de 1.2 scria &#8220;A&#8221; atunci functia FileReadNumber ar fi intors 0.</p>
<p><strong>FileReadString()</strong></p>
<p>Functia citeste dintr-un string de la pozitia curenta. Prototipul functiei este :</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1130145"><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p1130code145"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">string</span>  <span style="color: #8a2be2;">FileReadString</span><span style="color: #008000;">&#40;</span>
 <span style="color: #0000ff;">int</span>  file_handle      <span style="color: #808080;">// Referinta fisierului</span>
 <span style="color: #0000ff;">int</span>  size<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #008000;">1</span>          <span style="color: #808080;">// Lungimea stringului</span>
<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Functia are ca parametri : file_handle , care este referinta fisierului intoarsa de FileOpen si size care este numarul de caractere pe care dorim sa il citim.</p>
<p>Exemplu de cod:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1130146"><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p1130code146"><pre class="mql5" style="font-family:monospace;"> <span style="color: #0000ff;">int</span> fh<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileOpen</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;test.bin&quot;</span>,<span style="color: #333399;">FILE_BIN</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_READ</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_WRITE</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileWriteString</span><span style="color: #008000;">&#40;</span>fh,<span style="color: #008080;">&quot;abcdef&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileSeek</span><span style="color: #008000;">&#40;</span>fh,0,<span style="color: #333399;">SEEK_SET</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">string</span> svalue<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileReadString</span><span style="color: #008000;">&#40;</span>fh,3<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Daca deschidem fisierul ca text , al doilea parametru nu este necesar ,  functia FileReadString() va citi pana va intalni sfarsitul de linie (&#8216;\r\n&#8217;). Nici in cazul fisierelor deschise ca CSV al doilea parametru nu este necesar , functia citeste intalneste separatorul.</p>
<p><strong>FileReadStruct()</strong></p>
<p>Functia citeste continutul intr-o structura dintr-un fisier BIN , incepand cu pozitia curenta a pointerului. Prototipul functiei este:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1130147"><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p1130code147"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">uint</span>  <span style="color: #8a2be2;">FileReadStruct</span><span style="color: #008000;">&#40;</span>
 <span style="color: #0000ff;">int</span>                file_handle      <span style="color: #808080;">// Referinta fisierului</span>
 any_simple_struct  str_object,      <span style="color: #808080;">// Structura in care fac citirea</span>
 <span style="color: #0000ff;">int</span>                size<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #008000;">1</span>          <span style="color: #808080;">// Marimea structurii in bytes</span>
<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Exemplu de cod:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p1130148"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code" id="p1130code148"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">int</span> fh<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileOpen</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;test.bin&quot;</span>,<span style="color: #333399;">FILE_BIN</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_READ</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_WRITE</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
MqlRates w<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span>,r<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>  
<span style="color: #8a2be2;">CopyRates</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">Symbol</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,<span style="color: #333399;">PERIOD_D1</span>,0,1,w<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> so<span style="color: #000080;">=</span><span style="color: #8a2be2;">sizeof</span><span style="color: #008000;">&#40;</span>w<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: #0000ff;">uint</span> s<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileWriteStruct</span><span style="color: #008000;">&#40;</span>fh,w<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>,so<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileSeek</span><span style="color: #008000;">&#40;</span>fh,0,<span style="color: #333399;">SEEK_SET</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileReadStruct</span><span style="color: #008000;">&#40;</span>fh,r<span style="color: #008000;">&#91;</span>0<span style="color: #008000;">&#93;</span>,so<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #8a2be2;">FileClose</span><span style="color: #008000;">&#40;</span>fh<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>As vrea sa precizez ca de la versiunea 252 a MetaEditor in FileWriteStruct() si FileReadStruct() lucreaza strict cu structuri, iar inainte lucrau si cu tablouri. In versiunile mai vechi mergea sa scriem de exemplu &#8220;FileWriteStruct(fh,<strong>a</strong>,so)&#8221; dar acum linia se intoarce cu eroare (&#8220;a &#8211; invalid access array&#8221;).</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/lucru-cu-fisiere-partea-a-iv-a/&amp;t=Lucrul+cu+fisiere.+Partea+a+IV-a&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/lucru-cu-fisiere-partea-a-iv-a/&amp;title=Lucrul+cu+fisiere.+Partea+a+IV-a&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></td><td><script type='text/javascript'><!--yahooBuzzArticleHeadline=Lucrul+cu+fisiere.+Partea+a+IV-a;//--></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/lucru-cu-fisiere-partea-a-iv-a/&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/lucru-cu-fisiere-partea-a-iv-a/',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/lucru-cu-fisiere-partea-a-iv-a/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Accesarea datelor de piata in MQL5</title>
		<link>http://mqlmagazine.com/ro/programarea-in-mql/accesarea-datelor-de-piata-in-mql5/</link>
		<comments>http://mqlmagazine.com/ro/programarea-in-mql/accesarea-datelor-de-piata-in-mql5/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 20:29:42 +0000</pubDate>
		<dc:creator>Bogdan Baltatu, MQLmagazine editor</dc:creator>
				<category><![CDATA[Programarea in MQL]]></category>

		<guid isPermaLink="false">http://mqlmagazine.com/ro/?p=935</guid>
		<description><![CDATA[[English version] [MQLmagazine.com in english] [Editia romaneasca]
In acest articol va voi prezenta functiile de accesare a datelor despre piata in MQL5 , dar voi compara cu functia care facea acest lucru in MQL4.
In MQL4 exista o functie unica cu care se aflau toate informatiile si anume MarketInfo(). In MQL5 functia MarketInfo() a disparut , acesteia [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mqlmagazine.com/mql-programming/accessing-market-data-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>In acest articol va voi prezenta functiile de accesare a datelor despre piata in MQL5 , dar voi compara cu functia care facea acest lucru in MQL4.</p>
<p>In MQL4 exista o functie unica cu care se aflau toate informatiile si anume MarketInfo(). In MQL5 functia MarketInfo() a disparut , acesteia luandu-i locul functiile SymbolInfoDouble() , SymbolInfoInteger() , SymbolInfoString() ,SymbolInfoTick(). Numele fiecarei functii este format din 3 cuvinte: primele 2 sunt &#8216;SymbolInfo&#8217; , si ultimul cuvant care arata ce returneaza functia respectiv &#8216;Double&#8217; , &#8216;Integer&#8217; , &#8216;String&#8217;.</p>
<p><strong>SymbolInfoDouble()</strong></p>
<p>Functia are 2 prototipuri si anume :</p>

<div class="wp_codebox"><table width="100%" ><tr id="p935152"><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p935code152"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">double</span>  <span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>
   <span style="color: #0000ff;">string</span>  name,        <span style="color: #808080;">// simbol</span>
   <span style="color: #0000ff;">int</span>     prop_id      <span style="color: #808080;">// identificator de proprietate</span>
<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Al doilea prototip de functie este:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p935153"><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p935code153"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">bool</span>  <span style="color: #8a2be2;">SymbolInfoDouble</span><span style="color: #008000;">&#40;</span>
   <span style="color: #0000ff;">string</span>   name,       <span style="color: #808080;">// simbol</span>
   <span style="color: #0000ff;">int</span>      prop_id,    <span style="color: #808080;">// identificator de proprietate</span>
   <span style="color: #0000ff;">double</span> <span style="color: #000040;">&amp;</span>double_var  <span style="color: #808080;">// variabila rezultat</span>
<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Functia returneaza true daca se executa cu succes (daca plaseaza valoarea intoarsa intr-o variabila trimisa ca parametru).</p>
<table style="width: 760px; border: 1px solid black;" border="0" cellspacing="0" cellpadding="3">
<tbody>
<tr>
<td style="vertical-align: top; border: 1px solid black;">Identificator</td>
<td style="vertical-align: top; border: 1px solid black;">Descriere</td>
<td style="vertical-align: top; border: 1px solid black;">Echivalent in MQL4</td>
</tr>
<tr>
<td style="vertical-align: top; border: 1px solid black;">SYMBOL_BID</td>
<td style="vertical-align: top; border: 1px solid black;">Bid &#8211; Cea mai buna oferta de cumparare (nivel II) sau pretul de vanzare (nivel I)</td>
<td style="vertical-align: top; border: 1px solid black;">MODE_BID</td>
</tr>
<tr>
<td style="vertical-align: top; border: 1px solid black;">SYMBOL_BIDHIGH</td>
<td style="vertical-align: top; border: 1px solid black;">Bid-ul maxim al zilei</td>
<td style="vertical-align: top; border: 1px solid black;">Nu are echivalent in MQL4</td>
</tr>
<tr>
<td style="vertical-align: top; border: 1px solid black;">SYMBOL_BIDLOW</td>
<td style="vertical-align: top; border: 1px solid black;">Bid-ul minim al zilei</td>
<td style="vertical-align: top; border: 1px solid black;">Nu are echivalent in MQL4</td>
</tr>
<tr>
<td style="vertical-align: top; border: 1px solid black;">SYMBOL_ASK</td>
<td style="vertical-align: top; border: 1px solid black;">Ask &#8211; Cea mai buna oferta de vanzare (nivel II) sau pretul de cumparare (nivel I)</td>
<td style="vertical-align: top; border: 1px solid black;">MODE_ASK</td>
</tr>
<tr>
<td style="vertical-align: top; border: 1px solid black;">SYMBOL_ASKHIGH</td>
<td style="vertical-align: top; border: 1px solid black;">Ask-ul maxim al zilei</td>
<td style="vertical-align: top; border: 1px solid black;">Nu are echivalent in MQL4</td>
</tr>
<tr>
<td style="vertical-align: top; border: 1px solid black;">SYMBOL_ASKLOW</td>
<td style="vertical-align: top; border: 1px solid black;">Ask-ul minim al zilei</td>
<td style="vertical-align: top; border: 1px solid black;">Nu are echivalent in MQL4</td>
</tr>
<tr>
<td style="vertical-align: top; border: 1px solid black;">SYMBOL_LAST</td>
<td style="vertical-align: top; border: 1px solid black;">Pretul ultimei tranzactii incheiate.</td>
<td style="vertical-align: top; border: 1px solid black;">Nu are echivalent in MQL4</td>
</tr>
<tr>
<td style="vertical-align: top; border: 1px solid black;">SYMBOL_LASTHIGH</td>
<td style="vertical-align: top; border: 1px solid black;">Pretul maxim a ultimei tranzactii incheiate a zilei</td>
<td style="vertical-align: top; border: 1px solid black;">Nu are echivalent in MQL4</td>
</tr>
<tr>
<td style="vertical-align: top; border: 1px solid black;">SYMBOL_LASTLOW</td>
<td style="vertical-align: top; border: 1px solid black;">Pretul minim al ultimei tranzactii incheiate a zilei</td>
<td style="vertical-align: top; border: 1px solid black;">Nu are echivalent in MQL4</td>
</tr>
<tr>
<td style="vertical-align: top; border: 1px solid black;">SYMBOL_POINT</td>
<td style="vertical-align: top; border: 1px solid black;">Punctul matematic. De exemplu, daca o cotatie are 4 cifre, punctul este 1/10000 .</td>
<td style="vertical-align: top; border: 1px solid black;">MODE_POINT</td>
</tr>
<tr>
<td style="vertical-align: top; border: 1px solid black;">SYMBOL_TRADE_TICK_VALUE</td>
<td style="vertical-align: top; border: 1px solid black;">Valoarea unui tick, pe un lot standard, in moneda contului. De exemplu este 1 la EURUSD, daca lotul este 100000, cu 5 cifre, sau 10, pentru 4 cifre. Pentru forex, este CONTRACT SIZE * TICK SIZE , considerat in a doua moneda din pereche si convertit mai departe in moneda contului. Pentru futures, este CONTRACT SIZE * POINT * TICK SIZE (ar trebui sa fie si convertit in moneda contului, dar e posibil sa nu fie&#8230;)</td>
<td style="vertical-align: top; border: 1px solid black;">MODE_TICKVALUE</td>
</tr>
<tr>
<td style="vertical-align: top; border: 1px solid black;">SYMBOL_TRADE_TICK_SIZE</td>
<td style="vertical-align: top; border: 1px solid black;">Marimea unui tick. La forex, coincide cu POINT. La alte piete, difera.De exemplu la porumb futures este 0.25, intrucat este pasul minim de cotare.</td>
<td style="vertical-align: top; border: 1px solid black;">MODE_TICKSIZE</td>
</tr>
<tr>
<td style="vertical-align: top; border: 1px solid black;">SYMBOL_TRADE_ CONTRACT_SIZE</td>
<td style="vertical-align: top; border: 1px solid black;">Marimea pentru un lot (lotul standard). De regula, pentru forex este de 100000 de unitati (la unii brokeri, atentie, 10000). Difera pentru futures.</td>
<td style="vertical-align: top; border: 1px solid black;">MODE_LOTSIZE</td>
</tr>
<tr>
<td style="vertical-align: top; border: 1px solid black;">SMBOL_VOLUME_MIN</td>
<td style="vertical-align: top; border: 1px solid black;">Volumul minim al unei tranzactii</td>
<td style="vertical-align: top; border: 1px solid black;">MODE_MINLOT</td>
</tr>
<tr>
<td style="vertical-align: top; border: 1px solid black;">SYMBOL_VOLUME_MAX</td>
<td style="vertical-align: top; border: 1px solid black;">Volumul maxim al unei tranzactii</td>
<td style="vertical-align: top; border: 1px solid black;">MODE_MAXLOT</td>
</tr>
<tr>
<td style="vertical-align: top; border: 1px solid black;">SYMBOL_VOLUME_STEP</td>
<td style="vertical-align: top; border: 1px solid black;">Pasul volumului (volumul acceptabil al tranzactiei trebuie sa fie un multiplu de pas, dupa volumul minim)</td>
<td style="vertical-align: top; border: 1px solid black;">MODE_LOTSTEP</td>
</tr>
<tr>
<td style="vertical-align: top; border: 1px solid black;">SYMBOL_SWAP_LONG</td>
<td style="vertical-align: top; border: 1px solid black;">Swap pentru pozitia long</td>
<td style="vertical-align: top; border: 1px solid black;">MODE_SWAPLONG</td>
</tr>
<tr>
<td style="vertical-align: top; border: 1px solid black;">SYMBOL_SWAP_SHORT</td>
<td style="vertical-align: top; border: 1px solid black;">Swap pentru pozitia short</td>
<td style="vertical-align: top; border: 1px solid black;">MODE_SWAPSHORT</td>
</tr>
</tbody>
</table>
<p><strong>SymbolInfoInteger()</strong></p>
<p>Functia are acelasi prototip ca functia SymbolInfoDouble().</p>
<p>Tabelul de echivalenta a functiei SymbolInfoInteger() in MQL4 este:</p>
<table style="width: 760px; border: 1px solid black;" border="0" cellspacing="0" cellpadding="3">
<tbody>
<tr>
<td style="border: 1px solid black; vertical-align: top;">Identificator</td>
<td style="border: 1px solid black; vertical-align: top;">Descriere</td>
<td style="border: 1px solid black; vertical-align: top;">Tip</td>
<td style="border: 1px solid black; vertical-align: top;">Echivalentul in MQL4</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_SELECT</td>
<td style="border: 1px solid black; vertical-align: top;">Simbolul este selectat in Market Watch</td>
<td style="border: 1px solid black; vertical-align: top;">bool</td>
<td style="border: 1px solid black; vertical-align: top;">Nu are echivalent in MQL4</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_VOLUME</td>
<td style="border: 1px solid black; vertical-align: top;">Volumul ultimei tranzactii</td>
<td style="border: 1px solid black; vertical-align: top;">long</td>
<td style="border: 1px solid black; vertical-align: top;">Nu are echivalent in MQL4</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_VOLUMEHIGH</td>
<td style="border: 1px solid black; vertical-align: top;">Volumul maxim al zilei</td>
<td style="border: 1px solid black; vertical-align: top;">long</td>
<td style="border: 1px solid black; vertical-align: top;">Nu are echivalent in MQL4</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_VOLUMELOW</td>
<td style="border: 1px solid black; vertical-align: top;">Volumul minim al zilei</td>
<td style="border: 1px solid black; vertical-align: top;">long</td>
<td style="border: 1px solid black; vertical-align: top;">Nu are echivalent in MQL4</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_VOLUMEBID</td>
<td style="border: 1px solid black; vertical-align: top;">Volumul pentru Bid-ul curent</td>
<td style="border: 1px solid black; vertical-align: top;">long</td>
<td style="border: 1px solid black; vertical-align: top;">Nu are echivalent in MQL4</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_VOLUMEASK</td>
<td style="border: 1px solid black; vertical-align: top;">Volumul pentru Ask-ul curent</td>
<td style="border: 1px solid black; vertical-align: top;">long</td>
<td style="border: 1px solid black; vertical-align: top;">Nu are echivalent in MQL4</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_TIME</td>
<td style="border: 1px solid black; vertical-align: top;">Timpul ultimei cotari</td>
<td style="border: 1px solid black; vertical-align: top;">datetime</td>
<td style="border: 1px solid black; vertical-align: top;">MODE_TIME</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_DIGITS</td>
<td style="border: 1px solid black; vertical-align: top;">Numarul de zecimale dupa punct (sau logaritm in baza 10 din inversul lui POINT)</td>
<td style="border: 1px solid black; vertical-align: top;">int</td>
<td style="border: 1px solid black; vertical-align: top;">MODE_DIGITS</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_SPREAD</td>
<td style="border: 1px solid black; vertical-align: top;">Valoarea spredului in puncte</td>
<td style="border: 1px solid black; vertical-align: top;">int</td>
<td style="border: 1px solid black; vertical-align: top;">MODE_SPREAD</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_TICK_BOOKDEPTH</td>
<td style="border: 1px solid black; vertical-align: top;">Adancimea pietei in nivele de stocare a cotatiilor.</td>
<td style="border: 1px solid black; vertical-align: top;">long</td>
<td style="border: 1px solid black; vertical-align: top;">Nu are echivalent in MQL4</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_TRADE_CALC_MODE</td>
<td style="border: 1px solid black; vertical-align: top;">Modul de calcul al profitului si marjei pentru contract</td>
<td style="border: 1px solid black; vertical-align: top;">ENUM_ SYMBOL_ CALC_ MODE</td>
<td style="border: 1px solid black; vertical-align: top;">Nu are echivalent in MQL4</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_TRADE_MODE</td>
<td style="border: 1px solid black; vertical-align: top;">Tipul de executie al ordinului</td>
<td style="border: 1px solid black; vertical-align: top;">ENUM_ SYMBOL_ TRADE_ MODE</td>
<td style="border: 1px solid black; vertical-align: top;">Nu are echivalent in MQL4</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_TRADE_STOPS_LEVEL</td>
<td style="border: 1px solid black; vertical-align: top;">Distanta minima acceptabila intre pretul curent si nivelul de Stop</td>
<td style="border: 1px solid black; vertical-align: top;">int</td>
<td style="border: 1px solid black; vertical-align: top;">MODE_STOPLEVEL</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_TRADE_FREEZE_LEVEL</td>
<td style="border: 1px solid black; vertical-align: top;">Nivelul de inghetare a ordinului, in puncte. Daca pretul de executie este in zona definita de nivelul de inghetare, ordinul nu poate modificat, anulat sau inchis.</td>
<td style="border: 1px solid black; vertical-align: top;">int</td>
<td style="border: 1px solid black; vertical-align: top;">MODE_FREEZELEVEL</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_TRADE_EXEMODE</td>
<td style="border: 1px solid black; vertical-align: top;">Modul de executie al tranzactiei</td>
<td style="border: 1px solid black; vertical-align: top;">ENUM_ SYMBOL_ TRADE_ EXECUTION</td>
<td style="border: 1px solid black; vertical-align: top;">Nu are echivalent in MQL4</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_SWAP_MODE</td>
<td style="border: 1px solid black; vertical-align: top;">Modelul de calcul al swapului</td>
<td style="border: 1px solid black; vertical-align: top;">ENUM_ SYMBOL_ SWAP_ MODE</td>
<td style="border: 1px solid black; vertical-align: top;">MODE_SWAPTYPE</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_ROLLOVER3DAYS</td>
<td style="border: 1px solid black; vertical-align: top;">Ziua in care swapul e triplu</td>
<td style="border: 1px solid black; vertical-align: top;">ENUM_ DAY_OF_ WEEK</td>
<td style="border: 1px solid black; vertical-align: top;">Nu are echivalent in MQL4</td>
</tr>
</tbody>
</table>
<p>Tipul ENUM_SYMBOL_CALC_MODE descrie modul de calcul pentru marja si profit, dupa cum urmeaza:</p>
<table style="border-collapse: collapse; width: 100%;" border="0">
<tbody>
<tr>
<td style="border: 1px solid black; vertical-align: top;">Identificator</td>
<td style="border: 1px solid black; vertical-align: top;">Descriere</td>
<td style="border: 1px solid black; vertical-align: top;">Formula</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_CALC_MODE_FOREX</td>
<td style="border: 1px solid black; vertical-align: top;">Forex</td>
<td style="border: 1px solid black; vertical-align: top;">Marja=Lots*Contract_Size/Leverage;<br />
Profit=(close_price-open_price)*Contract_Size*Lots</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_CALC_MODE_CFD</td>
<td style="border: 1px solid black; vertical-align: top;">CFD</td>
<td style="border: 1px solid black; vertical-align: top;">Marja=Lots*Contract_Size*Market_Price*Percentage/100;<br />
Profit=(close_price-open_price)*Contract_Size*Lots</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_CALC_MODE_FUTURES</td>
<td style="border: 1px solid black; vertical-align: top;">Futures</td>
<td style="border: 1px solid black; vertical-align: top;">Marja=Lots*Initial_Margin*Percentage/100;<br />
Profit=(close_price-open_price)*Tick_Price/Tick_Size*Lots</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_CALC_MODE_CFDINDEX</td>
<td style="border: 1px solid black; vertical-align: top;">Indice CFD</td>
<td style="border: 1px solid black; vertical-align: top;">Marja=(Lots*Contract_Size*Market_Price)*Tick_Price/Tick_Size;<br />
Profit=(close_price-open_price)*Contract_Size*Lots</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_CALC_MODE_CFDLEVERAGE</td>
<td style="border: 1px solid black; vertical-align: top;">CFD cu levier</td>
<td style="border: 1px solid black; vertical-align: top;">Marja=(Lots*Contract_Size*Market_Price*Percentage)/Leverage;<br />
Profit=(close_price-open_price)*Contract_Size*Lots</td>
</tr>
</tbody>
</table>
<p>Tipul ENUM_SYMBOL_TRADE_MODE descrie ce fel de operatiuni sunt permise.</p>
<table style="border-collapse: collapse; width: 100%;" border="0">
<tbody>
<tr>
<td style="border: 1px solid black; vertical-align: top;">Identificator</td>
<td style="border: 1px solid black; vertical-align: top;">Semnificatie</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_TRADE_MODE_DISABLED</td>
<td style="border: 1px solid black; vertical-align: top;">Tranzactionarea este oprita</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_TRADE_MODE_LONGONLY</td>
<td style="border: 1px solid black; vertical-align: top;">Se admite numai ca pozitia sa fie long</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_TRADE_MODE_SHORTONLY</td>
<td style="border: 1px solid black; vertical-align: top;">Se admite numai ca pozitia sa fie short</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_TRADE_MODE_CLOSEONLY</td>
<td style="border: 1px solid black; vertical-align: top;">Se admit numai operatiuni de inchidere a pozitiei</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_TRADE_MODE_FULL</td>
<td style="border: 1px solid black; vertical-align: top;">Trading nerestrictionat</td>
</tr>
</tbody>
</table>
<p>Tipul ENUM_SYMBOL_TRADE_MODE descrie ce fel este executia.</p>
<table style="border-collapse: collapse; width: 100%;" border="0">
<tbody>
<tr>
<td style="border: 1px solid black; vertical-align: top;">Identificator</td>
<td style="border: 1px solid black; vertical-align: top;">Semnificatie</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_TRADE_EXECUTION_REQUEST</td>
<td style="border: 1px solid black; vertical-align: top;">Executie la cerere.</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_TRADE_EXECUTION_INSTANT</td>
<td style="border: 1px solid black; vertical-align: top;">Executie instant.</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_TRADE_EXECUTION_MARKET</td>
<td style="border: 1px solid black; vertical-align: top;">Executie la piata</td>
</tr>
</tbody>
</table>
<p>In masura in care Deviation ramane un parametru crucial pentru executie, ramane de vazut diferenta dintre cele trei moduri&#8230;</p>
<p>Tipul ENUM_SYMBOL_SWAP_MODE descrie in ce fel se aplica swapul.</p>
<table style="border-collapse: collapse; width: 100%;" border="0">
<tbody>
<tr>
<td style="border: 1px solid black; vertical-align: top;">Identificator</td>
<td style="border: 1px solid black; vertical-align: top;">Semnificatie</td>
<td style="border: 1px solid black; vertical-align: top;">Observatii</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_SWAP_MODE_DISABLED</td>
<td style="border: 1px solid black; vertical-align: top;">Fara swap</td>
<td style="border: 1px solid black; vertical-align: top;"></td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_SWAP_MODE_BY_POINTS</td>
<td style="border: 1px solid black; vertical-align: top;">Swap in puncte</td>
<td style="border: 1px solid black; vertical-align: top;"></td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_SWAP_MODE_BY_MONEY</td>
<td style="border: 1px solid black; vertical-align: top;">Swap in bani, cu valoarea specificata in moneda de depozit.</td>
<td style="border: 1px solid black; vertical-align: top;">Probabil swap in moneda de depozit, pentru lotul standard.</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_SWAP_MODE_BY_INTEREST</td>
<td style="border: 1px solid black; vertical-align: top;">Swap in puncte procentuale anuale (model bancar, an de 360 de zile)</td>
<td style="border: 1px solid black; vertical-align: top;">Formula e destul de clara, dar care e moneda?</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_SWAP_MODE_BY_MARGIN_CURRENCY</td>
<td style="border: 1px solid black; vertical-align: top;">Swap in bani, cu valoarea specificata in moneda marjei.</td>
<td style="border: 1px solid black; vertical-align: top;">Probabil swap in moneda marjei, pentru lotul standard.</td>
</tr>
</tbody>
</table>
<p>Totusi, MetaQuotes nu a indicat si <strong>formulele de calcul</strong> pentru swap. Swapul a fost o adevarata enigma in MT4, iar formulele de calcul au fost depistate pe incercate (in afara de tipul 2, pe care nu l-am acoperit in articolul din 2007 pe tema swapului). Se pare ca totusi de aceasta data vor fi mai simplu de extras, fara bataile de cap pe care le-am avut cu MT4.</p>
<p>Tipul ENUM_DAY_OF_WEEK cuprinde zilele saptamanii.</p>
<p><strong>SymbolInfoString()</strong></p>
<p>Functia are acelasi prototip ca functia SymbolInfoDouble().</p>
<p>Tabelul de echivalenta a functiei SymbolInfoString() in MQL4 este:</p>
<table style="border-collapse: collapse; width: 100%;" border="0">
<tbody>
<tr>
<td style="border: 1px solid black; vertical-align: top;">Identificator</td>
<td style="border: 1px solid black; vertical-align: top;">Descriere</td>
<td style="border: 1px solid black; vertical-align: top;">Echivalentul in MQL4</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_CURRENCY_BASE</td>
<td style="border: 1px solid black; vertical-align: top;">Moneda de baza a simbolului</td>
<td style="border: 1px solid black; vertical-align: top;">Nu are echivalent in MQL4</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_CURRENCY_PROFIT</td>
<td style="border: 1px solid black; vertical-align: top;">Moneda profitului</td>
<td style="border: 1px solid black; vertical-align: top;">Nu are echivalent in MQL4</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_CURRENCY_MARGIN</td>
<td style="border: 1px solid black; vertical-align: top;">Moneda marjei. La forex, e prima moneda din pereche.</td>
<td style="border: 1px solid black; vertical-align: top;">Nu are echivalent in MQL4</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_BANK</td>
<td style="border: 1px solid black; vertical-align: top;">Furnizorul cotatiei curente</td>
<td style="border: 1px solid black; vertical-align: top;">Nu are echivalent in MQL4</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_DESCRIPTION</td>
<td style="border: 1px solid black; vertical-align: top;">Descrierea simbolului</td>
<td style="border: 1px solid black; vertical-align: top;">Nu are echivalent in MQL4</td>
</tr>
<tr>
<td style="border: 1px solid black; vertical-align: top;">SYMBOL_PATH</td>
<td style="border: 1px solid black; vertical-align: top;">Calea in arborele de simboluri</td>
<td style="border: 1px solid black; vertical-align: top;">Nu are echivalent in MQL4</td>
</tr>
</tbody>
</table>
<p><strong>SymbolInfoTick()</strong></p>
<p>Functia <strong>SymbolInfoTick()</strong> are urmatorul prototip:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p935154"><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p935code154"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">bool</span>  <span style="color: #8a2be2;">SymbolInfoTick</span><span style="color: #008000;">&#40;</span>
   <span style="color: #0000ff;">string</span>    symbol,     <span style="color: #808080;">// simbol</span>
   MqlTick<span style="color: #000040;">&amp;</span>  tick        <span style="color: #808080;">// referinta la o structura MqlTick</span>
   <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Functia pune intr-o structura MqlTick datele cotatiei curente de piata.</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/accesarea-datelor-de-piata-in-mql5/&amp;t=Accesarea+datelor+de+piata+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/accesarea-datelor-de-piata-in-mql5/&amp;title=Accesarea+datelor+de+piata+in+MQL5&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></td><td><script type='text/javascript'><!--yahooBuzzArticleHeadline=Accesarea+datelor+de+piata+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/accesarea-datelor-de-piata-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/accesarea-datelor-de-piata-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/accesarea-datelor-de-piata-in-mql5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lucrul cu fisiere. Partea a III-a</title>
		<link>http://mqlmagazine.com/ro/programarea-in-mql/lucrul-cu-fisiere-functii-de-scriere/</link>
		<comments>http://mqlmagazine.com/ro/programarea-in-mql/lucrul-cu-fisiere-functii-de-scriere/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 20:29:22 +0000</pubDate>
		<dc:creator>Bogdan Baltatu, MQLmagazine editor</dc:creator>
				<category><![CDATA[Programarea in MQL]]></category>

		<guid isPermaLink="false">http://mqlmagazine.com/ro/?p=752</guid>
		<description><![CDATA[[English version] [MQLmagazine.com in english] [Editia romaneasca]
Acesta este al treilea articol din seria de articole intitulate &#8216;Lucrul cu fisiere&#8217; si tin sa va anunt ca este unui dintre cele mai importante articole din serie deoarece voi prezenta atat functiile de scriere in fisiere cat si exemple prin care voi evidentia anumite aspecte ale functiilor.
Functiile care [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://mqlmagazine.com/mql-programming/working-with-files-part-iii/" 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>Acesta este al treilea articol din seria de articole intitulate &#8216;Lucrul cu fisiere&#8217; si tin sa va anunt ca este unui dintre cele mai importante articole din serie deoarece voi prezenta atat functiile de scriere in fisiere cat si exemple prin care voi evidentia anumite aspecte ale functiilor.</p>
<p>Functiile care se refera strict la scrierea in fisiere sunt in numar de 8. Aceste functii sunt:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p752173"><td class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p752code173"><pre class="mql5" style="font-family:monospace;"><span style="color: #8a2be2;">FileWrite</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> , <span style="color: #8a2be2;">FileWriteArray</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> , <span style="color: #8a2be2;">FileWriteDouble</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> , <span style="color: #8a2be2;">FileWriteFloat</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> ,
<span style="color: #8a2be2;">FileWriteInteger</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> , <span style="color: #8a2be2;">FileWriteLong</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> , <span style="color: #8a2be2;">FileWriteString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> , <span style="color: #8a2be2;">FileWriteStruct</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span></pre></td></tr></table></div>

<p>In continuarea articolului va voi prezenta fiecare functie in parte cu observatiile de rigoare. Acestea fiind spuse sa trecem la treaba.</p>
<p><strong>FileWrite()</strong></p>
<p>Functia se foloseste pentru scrierea datelor in fisiere de tip CSV. Prototipul functiei este:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p752174"><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p752code174"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">uint</span>  <span style="color: #8a2be2;">FileWrite</span><span style="color: #008000;">&#40;</span>
   <span style="color: #0000ff;">int</span>  file_handle    <span style="color: #808080;">// referinta fisierului</span>
   ...                 <span style="color: #808080;">// Lista cu parametrii de scris</span>
   <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Parametrul <em>file_handle</em> reprezinta rezultatul intors de functia FileOpen() , functie care trebuie apelata cu flagurile FILE_CSV|FILE_WRITE. Daca fisierul nu este deschis cu flagul FILE_WRITE functia FileWrite() va esua.</p>
<p>Lista de parametri de scris in fisierul CSV nu poate fi mai mare de 63 , parametrii vor fi separati de delimitatorul specificat cand am deschis fisierul cu functia FileOpen(). Daca nu specificam delimitatorul atunci acesta va fi implicit caracterul &#8216;tab&#8217; (ASCII 9).<br />
Tipul parametrilor nu este specificat, ei putand fiind integer , datetime , float , &#8230; .Este important sa stim ca functia FileWrite() converteste in siruri de caractere parametrii primiti. Parametrii de tip double au 16 cifre dupa virgula , parametrii de tip float au 5 , iar parametrii de tip datetime sunt convertiti in formatul &#8216;YYYY.MM.DD HH:MI:SS&#8217;.<br />
Fiecare comanda FileWrite() pune la sfarsitul stringului generat &#8216;\r\n&#8217;. Acest lucru arata ca imediat dupa scrierea stringului cursorul a fost mutat pe linia urmatoare la capat de rand.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p752175"><td class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p752code175"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">int</span> file_handle<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileOpen</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;text.csv&quot;</span>,<span style="color: #333399;">FILE_ANSI</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_CSV</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_WRITE</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">uint</span> chars_written<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileWrite</span><span style="color: #008000;">&#40;</span>file_handle,1,3,4,5,6,7<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>In Excel 2007 , desi delimitatorul este &#8216;tab&#8217; si parametrii de inregistrat ar trebui sa fie afisati pe cate o coloana separata ei nu apar. Daca redenumim fisierul ca fiind &#8216;.txt&#8217; si il deschidem cu Excel 2007 atunci parametrii pe cate o coloana deorece recunoaste caracterul &#8216;tab&#8217;. Problema este din cauza Excel si nu merita studiata. Este recomandat sa deschideti fisierul CSV cu un editor precum notepad sau notepad++ in cazul in care are mai mult de 65535 linii.</p>
<p><strong>FileWriteArray()</strong></p>
<p>Functia scrie elementele din tablouri de diferite tipuri , cu exceptia celor de tip string , in fisiere deschise ca FILE_BIN.</p>
<p>Prototipul functiei este:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p752176"><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code" id="p752code176"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">int</span>  <span style="color: #8a2be2;">FileWriteArray</span><span style="color: #008000;">&#40;</span>
<span style="color: #0000ff;">int</span>   file_handle                  <span style="color: #808080;">// Referinta fisierului</span>
<span style="color: #0000ff;">void</span>  array<span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span>,                     <span style="color: #808080;">// Tabloul</span>
<span style="color: #0000ff;">int</span>   start_item<span style="color: #000080;">=</span><span style="color: #008000;">0</span>,             <span style="color: #808080;">// Indexul elementului din tablou</span>
<span style="color: #0000ff;">int</span>   items_count<span style="color: #000080;">=</span>WHOLE_ARRAY   <span style="color: #808080;">// Numarul de elemente</span>
<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Parametrii functiei sunt: <em>file_handle</em> , rezultatul intors de functia FileOpen(); <em>array</em> , tabloul din care extrag elementele pentru scrierea in fisier ; <em>start_item</em> , locul din tablou de unde incepe scrierea ; <em>items_count</em> , numarul de elemente pe pe care il copiez incepand de la <em>start_item</em>.</p>
<p>Rezultatul intors de functia FileWriteArray() este numarul de elemente scrise in fisier , rezultatul intors de functie trebuie sa fie egal cu items_count pentru ca functia sa fi avut o executie corecta.</p>
<p>Daca tabloul are 9 elemente si-i trimitem items_count mai mare ca 9 , functia FileWriteArray() nu va intoarce o eroare , ea va scrie cele 9 elemente.</p>
<p>Mai jos aveti un exemplu de cod care scrie o matrice intr-un fisier de tip bin (deschis cu FILE_BIN):</p>

<div class="wp_codebox"><table width="100%" ><tr id="p752177"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p752code177"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">double</span> array1<span style="color: #008000;">&#91;</span>3<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span>3<span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #008000;">&#123;</span><span style="color: #008000;">&#123;</span>1.0, 2.0, 3.0<span style="color: #008000;">&#125;</span>, <span style="color: #008000;">&#123;</span>4.0, 5.0, 6.0<span style="color: #008000;">&#125;</span>, <span style="color: #008000;">&#123;</span>7.0, 8.0, 9.0<span style="color: #008000;">&#125;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> file_handle<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileOpen</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;text.bin&quot;</span>,<span style="color: #333399;">FILE_BIN</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_WRITE</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> elements_written<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileWriteArray</span><span style="color: #008000;">&#40;</span>file_handle,array1,0,WHOLE_ARRAY<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Tablourile de tip string trebuie scrise in fisiere TXT. Filecare element , la scrierea in fisier, este urmat de characterele &#8216;\r\n&#8217; , deci fiecare element al matricei o sa fie scris pe o noua linie. Mai jos am exemplificat intr-un cod functionalitatea FileWriteArray() in cazul in care matricea pe care vreau sa o scriu este de tip string.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p752178"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p752code178"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">string</span> array1<span style="color: #008000;">&#91;</span><span style="color: #008000;">3</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">3</span><span style="color: #008000;">&#93;</span><span style="color: #000080;">=</span><span style="color: #008000;">&#123;</span><span style="color: #008000;">&#123;</span><span style="color: #008080;">&quot;a&quot;</span>, <span style="color: #008080;">&quot;b&quot;</span>, <span style="color: #008080;">&quot;c&quot;</span><span style="color: #008000;">&#125;</span>, <span style="color: #008000;">&#123;</span><span style="color: #008080;">&quot;d&quot;</span>, <span style="color: #008080;">&quot;e&quot;</span>, <span style="color: #008080;">&quot;f&quot;</span><span style="color: #008000;">&#125;</span>, <span style="color: #008000;">&#123;</span><span style="color: #008080;">&quot;g&quot;</span>, <span style="color: #008080;">&quot;h&quot;</span>, <span style="color: #008080;">&quot;i&quot;</span><span style="color: #008000;">&#125;</span><span style="color: #008000;">&#125;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> file_handle<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileOpen</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;text.txt&quot;</span>,<span style="color: #333399;">FILE_TXT</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_WRITE</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_ANSI</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> elements_written<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileWriteArray</span><span style="color: #008000;">&#40;</span>file_handle,array1,6,3<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p><strong>FileWriteDouble()</strong></p>
<p>Functia scrie intr-un fisier la pozitia curenta a cursorului o valoare de tip double. Prototipul functiei este :</p>

<div class="wp_codebox"><table width="100%" ><tr id="p752179"><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p752code179"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">uint</span>  <span style="color: #8a2be2;">FileWriteDouble</span><span style="color: #008000;">&#40;</span>
   <span style="color: #0000ff;">int</span>     file_handle      <span style="color: #808080;">// Referinta fisierului</span>
   <span style="color: #0000ff;">double</span>  dvalue           <span style="color: #808080;">// Valoarea pe care dorim sa o scriem</span>
   <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Parametrii functiei sunt doi la numar: <em>file_handle</em> este referinta catre fisierul deschis intors de FileOpen() si <em>dvalue</em> este valoarea de tip double pe care dorim sa o scrie in fisier.</p>
<p>Functia se executa cu succes daca rezultatul intors este 8 , adica lungimea in bytes a unei variabile de tip double si pointerul se muta cu 8 bytes.</p>
<p>Mai jos aveti un exemplu de cod.</p>

<div class="wp_codebox"><table width="100%" ><tr id="p752180"><td class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p752code180"><pre class="mql5" style="font-family:monospace;">fh<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileOpen</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;test.bin&quot;</span>,<span style="color: #333399;">FILE_WRITE</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_BIN</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   s<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileWriteDouble</span><span style="color: #008000;">&#40;</span>fh,a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Atentie: Pentru a folosi functia FileWriteDouble() fisierul trebuie deschis in modul binar , altfel functia esueaza la executie.</p>
<p><strong>FileWriteFloat()</strong></p>
<p>Functia FileWriteFloat() este asemanatoare cu FileWriteDouble() , numai ca tipul de variabila pe care il scriem in fisier este de tip float. Prototipul functiei este:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p752181"><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p752code181"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">uint</span>  <span style="color: #8a2be2;">FileWriteFloat</span><span style="color: #008000;">&#40;</span>
<span style="color: #0000ff;">int</span>    file_handle      <span style="color: #808080;">// Referinta fisierului</span>
<span style="color: #0000ff;">float</span>  fvalue           <span style="color: #808080;">// Valoarea pe care dorim sa o scriem</span>
<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Parametrii functiei sunt <em>file_handle</em> , referinta fisierului dat de functia FileOpen() si valoarea de tip float pe care dorim sa o scriem in fisierul nostru.</p>
<p>Exemplu de cod:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p752182"><td class="line_numbers"><pre>1
2
</pre></td><td class="code" id="p752code182"><pre class="mql5" style="font-family:monospace;">fh<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileOpen</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;test.bin&quot;</span>,<span style="color: #333399;">FILE_WRITE</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_BIN</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   s<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileWriteFloat</span><span style="color: #008000;">&#40;</span>fh,a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Desigur, rezultatul trebuie sa fie 4, lungimea in bytes a unei variabile de tip float, pentru o scriere corecta.</p>
<p><strong>FileWriteInteger()</strong></pre>
<p>Functia scrie o variabila de tip integer intr-un fisier de tip bin incepand de la pozitia curenta a pointerului. Prototipul functiei este:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p752183"><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p752code183"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">uint</span>  <span style="color: #8a2be2;">FileWriteInteger</span><span style="color: #008000;">&#40;</span>
<span style="color: #0000ff;">int</span>  file_handle          <span style="color: #808080;">// referinta fisierului</span>
<span style="color: #0000ff;">int</span>  ivalue,                <span style="color: #808080;">// Valoare pe care dorim sa o scriem</span>
<span style="color: #0000ff;">int</span>  size<span style="color: #000080;">=</span>INT_VALUE <span style="color: #808080;">// Marimea in bytes</span>
<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Parametrii functiei sunt : referinta fisierului , <em>file_handle</em> , valoarea pe care dorim sa o scriem in fisier si marimea ei in bytes.<br />
Untimul parametru poate fi 1, 2 sau 4. (1=char , 2=short , 4=integer).<br />
Functia intoarce 1,2 sau 4 in functie de parametrul <em>size</em> si anume valoarea intoarsa trebuie sa fie egala cu acesta, daca functia s-a executat corect.</p>
<p>Exemplu de cod:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p752184"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p752code184"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">int</span> a<span style="color: #000080;">=</span><span style="color: #008000;">2</span><span style="color: #008080;">;</span>
   fh<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileOpen</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;test.bin&quot;</span>,<span style="color: #333399;">FILE_WRITE</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_BIN</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
   s<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileWriteInteger</span><span style="color: #008000;">&#40;</span>fh,a,4<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Fisierul trebuie deschis ca bin neaparat , altfel functia da eroare. Daca functia a fost executata cu succes pointerul se muta cu cati bytes returneaza functia (1,2 sau 4).</p>
<p>Trebuie sa precizam ca prin 'int' in antetul functiei compilatorul intelege orice tip intreg, iar functia nu presupune intregi cu semn, putand lucra si cu intregi fara semn.</p>
<p><strong>FileWriteLong()</strong></p>
<p>Functia scrie o valoare long intr-un fisier bin incepand cu pozitia curenta a cursorului in fisier. Prototipul functiei este:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p752185"><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code" id="p752code185"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">uint</span>  <span style="color: #8a2be2;">FileWriteLong</span><span style="color: #008000;">&#40;</span>
<span style="color: #0000ff;">int</span>   file_handle      <span style="color: #808080;">// Referinta fisierului</span>
<span style="color: #0000ff;">long</span>  lvalue           <span style="color: #808080;">// Valoarea pe care dorim sa o scriem</span>
<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Parametrii functiei sunt : referinta fisierului intors de functia FileOpen() si valoarea pe care dorim sa o scriem.<br />
Daca functia se executa cu succes intoarce 8 , lungimea in bytes a unei variabile de tip long.</p>
<p>Exemplu de cod:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p752186"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p752code186"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">long</span> a<span style="color: #000080;">=</span><span style="color: #008000;">212313123</span><span style="color: #008080;">;</span>
fh<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileOpen</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;test.bin&quot;</span>,<span style="color: #333399;">FILE_WRITE</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_BIN</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
s<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileWriteLong</span><span style="color: #008000;">&#40;</span>fh,a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p><strong>FileWriteString()</strong></p>
<p>Functia scrie un string intr-un fisier de tip txt sau bin incepand de la pozitia curenta a cursorului. Prototipul functiei este:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p752187"><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p752code187"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">uint</span>  <span style="color: #8a2be2;">FileWriteString</span><span style="color: #008000;">&#40;</span>
   <span style="color: #0000ff;">int</span>     file_handle      <span style="color: #808080;">// Referinta fisierului</span>
   <span style="color: #0000ff;">string</span>  svalue,         <span style="color: #808080;">// Stringul pe care doresc sa il scriu</span>
   <span style="color: #0000ff;">int</span>     size<span style="color: #000080;">=</span><span style="color: #000040;">-</span><span style="color: #008000;">1</span>          <span style="color: #808080;">// Numarul de simboluri</span>
   <span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Parametrii functiei sunt: referinta fisierului , stringul pe care dorim sa il scriem si numarul de caractere pe care il contine stringul.<br />
Al treilea parametru este obligatoriu in cazul in care fisierul a fost deschis cu FILE_BIN , dar optional cand fisierul a fost deschis ca FILE_TXT.</p>
<p>Daca executia functiei reuseste atunci rezultatul este numarul de bytes scris in fisier si pozitie cursorului se deplaseaza cu numarul de bytes scrisi in fisier.</p>
<p>De precizat ar fi ca atunci cand folosim functia pentru a scrie intr-un fisier deschis cu FILE_UNICODE (specificat sau nu, caci FILE_UNICODE e default) numarul de bytes scrisi este de 2 ori mai mare decat numarul de caractere. Cand scriem cu flagul FILE_ANSI numarul de bytes scrisi coincide cu numarul de caractere. E cel putin ciudata decizia MetaQuotes sa faca FILE_UNICODE default in loc de FILE_ANSI. Normal ar fi ca FILE_ANSI sa fie default, pentru a evita dublarea inutila a marimii fisierelor text, stiindu-se ca userii in marea majoritate le vor deschide cu Notepad sau Excel.</p>
<p>Exemplu de cod:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p752188"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p752code188"><pre class="mql5" style="font-family:monospace;"> <span style="color: #0000ff;">string</span> a<span style="color: #000080;">=</span><span style="color: #008080;">&quot;A1b2C3&quot;</span><span style="color: #008080;">;</span>
fh<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileOpen</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;test.txt&quot;</span>,<span style="color: #333399;">FILE_WRITE</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_ANSI</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
s<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileWriteString</span><span style="color: #008000;">&#40;</span>fh,a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p><strong>FileWriteStruct()</strong></p>
<p>Functia scrie intr-un fisier de tip bin continutul unei structuri parsat ca un parametru incepand cu pozitia curenta a cursorului. Prototipul functiei este:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p752189"><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p752code189"><pre class="mql5" style="font-family:monospace;"><span style="color: #0000ff;">uint</span>  <span style="color: #8a2be2;">FileWriteStruct</span><span style="color: #008000;">&#40;</span>
<span style="color: #0000ff;">int</span>                file_handle      <span style="color: #808080;">// Referinta fisierului</span>
any_simple_struct  str_object<span style="color: #000040;">&amp;</span>,     <span style="color: #808080;">// Link catre obiectul de tip struct</span>
<span style="color: #0000ff;">int</span>                size             <span style="color: #808080;">// Marimea care o sa fie scrisa in bytes</span>
<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Parametrii functiei sunt: referinta fisierului intoarsa de functia FileOpen() , variabila de tip structura (trimisa prin referinta) si marimea in bytes pe care dorim sa o scriem. Daca functia este executata cu succes returneaza numarul de bytes scris.</p>
<p>Exemplu de cod:</p>

<div class="wp_codebox"><table width="100%" ><tr id="p752190"><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code" id="p752code190"><pre class="mql5" style="font-family:monospace;"> MqlRates a<span style="color: #008000;">&#91;</span>1<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>  
<span style="color: #8a2be2;">CopyRates</span><span style="color: #008000;">&#40;</span><span style="color: #8a2be2;">Symbol</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>,<span style="color: #333399;">PERIOD_D1</span>,0,1,a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">int</span> so<span style="color: #000080;">=</span><span style="color: #8a2be2;">sizeof</span><span style="color: #008000;">&#40;</span>a<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
fh<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileOpen</span><span style="color: #008000;">&#40;</span><span style="color: #008080;">&quot;te.bin&quot;</span>,<span style="color: #333399;">FILE_WRITE</span><span style="color: #000040;">|</span><span style="color: #333399;">FILE_BIN</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>   
s<span style="color: #000080;">=</span><span style="color: #8a2be2;">FileWriteStruct</span><span style="color: #008000;">&#40;</span>fh,a,so<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></td></tr></table></div>

<p>Cand definim structura 'a' trebuie sa o definesc ca pe un tablou , ca sa pot sa scriu in structura cu functia CopyRates() si trebuie neaparat sa o definesc ca avand cel putin un element.</p>
<p>De precizat ca in fisierele deschise cu FILE_BIN in care am scris ceva daca le deschidem o sa vedem niste caractere ciudate. Sa nu credeti ca valoarea pe care am vrut sa o scriem a fost scrisa gresit. Desi fisierele sunt bin le-am salvat ca fiind '.txt' pentru a putea sa le deschideti usor cu editorul text si sa vedeti ca ceva s-a fost scris.</p>
<p><em>Se pare ca MetaQuotes a ales o cale complicata pentru fisiere. Voi face o scurta trecere in revista a felului in care Borland Pascal cunostea fisierele, doar ca sa vedeti ce simplu era la vremea aceea (anii '90).<br />
Mai intai, Borland Pascal nu avea conceptul de referinta de fisier , de numar care sa il identifice. Avea doar variabile de tip fisier. Acestea erau variabile complexe, cunoscute doar de compilator - nu se puteau citi, scrie sau interoga. Functiile de citire/scriere erau cam 6 la numar , si anume: ReadLn, WriteLn, Read, Write, BlockRead, BlockWrite. ReadLn si WriteLn lucrau doar cu ecranul, tastatura si fisierele text, in vreme ce Read si Write lucrau si la nivel "binar". Datorita naturii speciale a variabilelor fisier, Read si Write stiau daca au operatiune I/O cu tastatura/ecranul sau cu un fisier. Nu era nevoie de FileRead sau FileWrite, intrucat daca primul parametru era o variabila fisier, el nu putea fi luat drept integer sau altceva - functiile stiau din start cu ce lucrau. Daca era <strong>file of text</strong> , si scriai Write(f,128) , functia ar fi scris "128" , text , pe 3 caractere, iar daca era <strong>file of byte</strong>, functia ar fi scris un byte cu valoarea 128.<br />
De asemenea, definirea stricta a variabilelor facea diferenta dintre tipurile de variabile si functiile stiau din start cati bytes au de citit/scris pentru fiecare tip de date. Daca fisierul avea un tip complex, gen <strong>file of record</strong> (record era echivalentul struct din MQL5), atunci functiile citeau si scriau una sau mai multe structuri la rand, incrementand pozitia in fisier cu numarul de structuri, nu cu numarul de bytes. BlockRead si BlockWrite lucrau cu orice fel de variabile, fiind interesate numai in lungimea blocurilor citite/scrise (functionau pe fisiere fara tip).</em></p>
<p>Multa atentie cand folositi functiile de fisiere. Altfel, puteti pierde timp inregistrand date care sunt salvate gresit in fisiere!</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/lucrul-cu-fisiere-functii-de-scriere/&amp;t=Lucrul+cu+fisiere.+Partea+a+III-a&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/lucrul-cu-fisiere-functii-de-scriere/&amp;title=Lucrul+cu+fisiere.+Partea+a+III-a&amp;t=2' height='18' width='120' frameborder='0' scrolling='no'></iframe></td><td><script type='text/javascript'><!--yahooBuzzArticleHeadline=Lucrul+cu+fisiere.+Partea+a+III-a;//--></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/lucrul-cu-fisiere-functii-de-scriere/&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/lucrul-cu-fisiere-functii-de-scriere/',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/lucrul-cu-fisiere-functii-de-scriere/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

