﻿<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/style.css'?>
<?xml-stylesheet type='text/css' href='https://stocksharp.com/css/bbeditor.css'?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="html">MarketRule1.And(MarketRule2) как работает?</title>
  <id>~/topic/3500/marketrule1_and(marketrule2)-kak-rabotaet/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-10T12:29:22Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=3500" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/24796/</id>
    <title type="text">Более того, он воспринимается, как будто оба правила должны наступить одновременно. Но как я понимаю...</title>
    <published>2013-03-26T05:20:52Z</published>
    <updated>2013-03-26T05:20:52Z</updated>
    <author>
      <name>Moadip</name>
      <uri>https://stocksharp.com/users/5973/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;Quote:&lt;/span&gt;&lt;div class="innerquote"&gt;Более того, он воспринимается, как будто оба правила должны наступить одновременно. Но как я понимаю это не так - ведь если цена последней сделки жила так: 145 - и сразу -&amp;gt; 130 метод в примере тоже сработает. Ведь так? Или должно быть именно одновременное срабатывание двух правил? Тогда как это технически проверяется?&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Проведите эксперимент.[smile] &lt;br /&gt;Возьмите два правила и проверьте как &lt;b&gt;AND&lt;/b&gt; с ними работает. Необязательно с правилами как в примере.&lt;br /&gt;Например эти: &lt;a href="http://stocksharp.com/doc/html/M_StockSharp_Algo_MarketRuleHelper_WhenFinished.htm" title="http://stocksharp.com/doc/html/M_StockSharp_Algo_MarketRuleHelper_WhenFinished.htm"&gt;MarketRuleHelper.WhenFinished&lt;/a&gt; и &lt;a href="http://stocksharp.com/doc/html/Overload_StockSharp_Algo_MarketRuleHelper_WhenNewTrades.htm" title="http://stocksharp.com/doc/html/Overload_StockSharp_Algo_MarketRuleHelper_WhenNewTrades.htm"&gt;MarketRuleHelper.WhenNewTrades&lt;/a&gt;&lt;br /&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/24786/</id>
    <title type="text">Спасибо за ответ. Насчет Once() я действительно протупил. Оно там ни к чему - даже не знаю, зачем пр...</title>
    <published>2013-03-25T19:28:13Z</published>
    <updated>2013-03-25T19:34:43Z</updated>
    <author>
      <name>FlashPlayer</name>
      <uri>https://stocksharp.com/users/16669/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Спасибо за ответ. Насчет Once() я действительно протупил. Оно там ни к чему - даже не знаю, зачем про него написал) Запутался..&lt;br /&gt;&lt;br /&gt;А вот по поводу примера, я считаю он не очень корректно отображает всю прелесть And(). Ведь пример воспринимается, как будто правило должно сработать, только если цена будет между 135 и 140. Более того, он воспринимается, как будто оба правила должны наступить одновременно. Но как я понимаю это не так - ведь если цена последней сделки жила так: 145 - и сразу -&amp;gt; 130 метод в примере тоже сработает. Ведь так? Или должно быть именно одновременное срабатывание двух правил? Тогда как это технически проверяется?&lt;br /&gt;&lt;br /&gt;И если я не прав - можно ли тогда как-то просто реализовать такое правило: сработать сразу, когда оба правила выполнились хотя бы по разу. То есть у меня есть два события, выполнение которых я жду, но не знаю в каком они порядке исполнятся. И хочу подписаться на событие свершения обоих этих событий хотя бы раз. Я нашел кажется решение, но оно какое-то муторное через эксклюзивы.. Хочется проще.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/24784/</id>
    <title type="text">В данном случае правила можно считать условием, пока не выполняться оба условия, метод в .Do() не бу...</title>
    <published>2013-03-25T19:14:54Z</published>
    <updated>2013-03-25T19:14:54Z</updated>
    <author>
      <name>Moadip</name>
      <uri>https://stocksharp.com/users/5973/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">В данном случае правила можно считать условием, пока не выполняться &lt;b&gt;оба&lt;/b&gt; условия, метод в &lt;b&gt;.Do()&lt;/b&gt; не будет вызван. &lt;br /&gt;И не важно в каком порядке выполнятся правила.&lt;br /&gt;&lt;br /&gt;По поводу срабатывания одного правила несколько раз. &lt;br /&gt;Какая разница сколько сработает одно правило(условие)? Пока второе не сработает, обработчик не будет вызван.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Из справки:&lt;/u&gt;&lt;br /&gt;&lt;br /&gt;Когда цена последней сделки будет выше 135000 И ниже 140000:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

var priceMore = new Unit(135000m, UnitTypes.Limit);
var priceLess = new Unit(140000m, UnitTypes.Limit);

MarketRuleHelper
    .And(new IMarketRule[] {Security.WhenLastTradePriceMore(priceMore), Security.WhenLastTradePriceLess(priceLess)})
    .Do(() =&amp;gt; this.AddInfoLog(string.Format(&amp;quot;Цена последней сделки находится в диапазоне от {0} до {1}&amp;quot;, priceMore, priceLess)))
    .Apply(this);
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Цена может очень долго болтаться ниже 135000. Т.е. постоянно будет срабатывать правило &lt;b&gt;Security.WhenLastTradePriceLess(priceLess)&lt;/b&gt;.&lt;br /&gt;Но только когда цена поднимется выше 135000, сработает второе правило - &lt;b&gt;Security.WhenLastTradePriceMore(priceMore)&lt;/b&gt;, и только тогда вызовется:&lt;br /&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

this.AddInfoLog(string.Format(&amp;quot;Цена последней сделки находится в диапазоне от {0} до {1}&amp;quot;, priceMore, priceLess))
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/24780/</id>
    <title type="text">Как работает комбинация правил MarketRule1.And(MarketRule2).Do(smth)? Она сработает сразу как только...</title>
    <published>2013-03-25T18:24:37Z</published>
    <updated>2013-03-25T18:24:37Z</updated>
    <author>
      <name>FlashPlayer</name>
      <uri>https://stocksharp.com/users/16669/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Как работает комбинация правил MarketRule1.And(MarketRule2).Do(smth)? Она сработает сразу как только выполнятся оба правила? Не важно в каком порядке? И теоретически может быть, что к моменту срабатывания комбинации одно из двух правил может сработать несколько раз? Если да, то лечится так: MarketRule1.Once().And(MarketRule2.Once()).Do(smth)? Спасибо.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>