﻿<?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">2 урок</title>
  <id>~/topic/3554/2-urok/</id>
  <rights type="text">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  <updated>2026-04-22T09:41:06Z</updated>
  <logo>https://stocksharp.com/images/logo.png</logo>
  <link href="https://stocksharp.com/handlers/atom.ashx?category=topic&amp;id=3554" rel="self" type="application/rss+xml" />
  <entry>
    <id>https://stocksharp.com/posts/m/25167/</id>
    <title type="text">http://vk.com/video_ext.php?oid=-66674957&amp;amp;id=167881046&amp;amp;hash=9de1925dbafbc515&amp;amp;hd=3 Презентация Темы з...</title>
    <published>2013-04-04T11:50:30Z</published>
    <updated>2014-03-05T21:39:54Z</updated>
    <author>
      <name>Самунджян Артем</name>
      <uri>https://stocksharp.com/users/675/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">[VK]http://vk.com/video_ext.php?oid=-66674957&amp;amp;id=167881046&amp;amp;hash=9de1925dbafbc515&amp;amp;hd=3[/VK]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:120%"&gt;&lt;a target="_blank" rel="nofollow" href="https://stocksharp.com/away/?u=AQAAAAAAAAAIzJHwV0tlbjaFgHtJkJp19C0--M3OIYYx_PjrCHLl4aFqrx4xcfSUDpPkFQTMU-ckQrF77wL--fWYFpHVJRHH" title="https://www.dropbox.com/s/57bq590alhesghg/Lesson%25202.pptx"&gt;&lt;b&gt;Презентация&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:140%"&gt;&lt;b&gt;Темы занятия 2 (Объявление и вызов методов. Знакомство со структурами и классами.)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;•	Разбор домашнего задания&lt;br /&gt;•	Функции и их разновидности&lt;br /&gt;•	Передача параметров по значению и по ссылке&lt;br /&gt;•	Параметры ref, out. Использование params.&lt;br /&gt;•	var + foreach&lt;br /&gt;•	Структуры и классы, введение. public/private&lt;br /&gt;•	static методы&lt;br /&gt;&lt;br /&gt;Код из урока:&lt;br /&gt;&lt;div class='spoilertitle'&gt;&lt;input type='button' value='Show spoiler' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_3a69b3e90c674bf5aa330d500ea3cb12');" title='Show spoiler' /&gt;&lt;/div&gt;&lt;div class='spoilerbox' id='spolier_3a69b3e90c674bf5aa330d500ea3cb12' style='display:none'&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

using System;

namespace TestApp2
{
    internal class Program
    {
        const int N = 10;
        const int lot = 10;
        static int[] my_positions = new int[N] {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000};

        static bool IsPositionBad(int positionNumber, int[] someprices)
        {
            return my_positions[positionNumber] &amp;gt; someprices[positionNumber];
        }


        static void ClosePosition(int positionToCloseNumber, int[] someprices)
        {
            // Something, we close position, imagine complex code here
            Console.WriteLine(my_positions[positionToCloseNumber] - someprices[positionToCloseNumber]);
//            my_positions[positionToCloseNumber] = -1;
//            someprices[positionToCloseNumber] = 0;
        }

        static void payTaxes(ref double sum)
        {
            sum *= 0.87;
            Console.WriteLine(sum);
        }

        static void getTotal(out int total)
        {
            total = 0;
            for (int i = 0; i &amp;lt; N; i++)
            {
                total = my_positions[i] * lot;
            }
        }

        static int getTotalOf(params int[] positions) // getTotalOf(int a, int b, int c ...)
        {
            int sum = 0;
            foreach (var i in positions)
            {
                sum += i*lot;
            }

            return sum;
        }


        private static void Main(string[] args)
        {
            var prices = new int[N];

            var r = new Random();

            for (int i = 0; i &amp;lt; N; i++)
            {
                prices[i] = my_positions[i] + r.Next(-10, 10);
            }

            for (int i = 0; i &amp;lt; N; i++)
            {
                if (IsPositionBad(i, prices)) ClosePosition(i, prices);
            }

            //------------------------------

            Console.WriteLine(&amp;quot;---------------------&amp;quot;);

            for (int i = 0; i &amp;lt; N; i++)
            {
                Console.WriteLine(&amp;quot;{0} \t {1}&amp;quot;, my_positions[i], prices[i]);
            }

            Console.WriteLine(&amp;quot;---------------------&amp;quot;);

            double my_sum = 100.25;
            payTaxes(ref my_sum);
            Console.WriteLine(my_sum);

            int main_total;
            getTotal(out main_total);
            Console.WriteLine(main_total);

            int a = 900;
            int paramsTotal = getTotalOf(200, a, 300, 400);
            Console.WriteLine(paramsTotal);

            Console.ReadLine();
        }
    }
}&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:120%"&gt;&lt;b&gt;Домашнее задание&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Реализовать структуру JapanCandles, 2-3 обычных метода и 1-2 статических. Заготовка ниже.&lt;br /&gt;&lt;br /&gt;&lt;div class='spoilertitle'&gt;&lt;input type='button' value='Show spoiler' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_c1d569d1d5894f9eb5b12b8eb0f4ed31');" title='Show spoiler' /&gt;&lt;/div&gt;&lt;div class='spoilerbox' id='spolier_c1d569d1d5894f9eb5b12b8eb0f4ed31' style='display:none'&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;

        struct JapanCandles
        {
            public double openPrice;
            public double closePrice;
            public double minPrice, maxPrice;
            public CandleColor isBlack;

            //2-3
            public bool isDodje(JapanCandles candle)
            {
                return Math.Abs(openPrice - closePrice) &amp;lt; Double.Epsilon;
            }

            //1-2
            static public int countHammers(JapanCandles[] candles)
            {
                // counting code here
                return 0;
            }

            static public void fillRandom(JapanCandles[] candles)
            {
                var r = new Random();
                for (int i = 0; i &amp;lt; candles.Count(); i++)
                {
                    candles[i].openPrice = 100 + Math.Sin(i*10);
                    candles[i].closePrice = 150 + Math.Sin(i * 10);
                }
            }
        }&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:120%"&gt;&lt;b&gt;Решение домашнего задания&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class='spoilertitle'&gt;&lt;input type='button' value='Show spoiler' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_838c3967dcb64a23ab1e057f0058f47b');" title='Show spoiler' /&gt;&lt;/div&gt;&lt;div class='spoilerbox' id='spolier_838c3967dcb64a23ab1e057f0058f47b' style='display:none'&gt;&lt;div class="code"&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;div class="innercode"&gt;&lt;pre class="brush:csharp"&gt;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Hometask2
{
    class Program
    {
        private const int N = 10;

        enum CandleColor
        {
            BLACK, WHITE
        }

        struct JapanCandles
        {
            public double openPrice;
            public double closePrice;
            public double minPrice, maxPrice;
            public CandleColor color;

            //2-3
            public bool isDodje() // Этот метод будет работать с полями той структуры, для которой будет вызван
            {
                return Math.Abs(openPrice - closePrice) &amp;lt; Double.Epsilon;
            }

            public bool isMarubozu() // аналогично, проверяем цвет и разчитываем длину хвостов
            {
                if (color == CandleColor.BLACK)
                    return (openPrice / maxPrice) &amp;gt; 0.9 &amp;amp;&amp;amp; (minPrice/closePrice) &amp;gt; 0.9;

                return (closePrice / maxPrice) &amp;gt; 0.9 &amp;amp;&amp;amp; (minPrice/openPrice) &amp;gt; 0.9;
            }

            public bool isUpHammer()
            {
                if (color == CandleColor.BLACK)
                    return (openPrice / maxPrice) &amp;gt; 0.8 &amp;amp;&amp;amp; (minPrice / closePrice) &amp;lt; 0.8;

                return (closePrice/maxPrice) &amp;gt; 0.8 &amp;amp;&amp;amp; (minPrice/openPrice) &amp;lt; 0.8;
            }


            //1-2
            static public int countMarubozus(JapanCandles[] candles) // А вот статический метод уже должен принимать параметры
            {
                int count = 0;

                foreach (var japanCandle in candles) // проходим по всему массиву
                {
                    if (japanCandle.isMarubozu()) count++; // используем нестатичный метод для каждого элемента
                }

                return count;
            }

            static public int countUpHammers(JapanCandles[] candles) // аналогично
            {
                int count = 0;

                foreach (var japanCandle in candles)
                {
                    if (japanCandle.isUpHammer()) count++;
                }

                return count;
            }

            static public void fillRandom(JapanCandles[] candles) // случайное заполнение
            {
                var r = new Random();

                double val;
                for (int i = 0; i &amp;lt; candles.Count(); i++)
                {
                    val = 100 + Math.Sin(i*10); // Пусть синус
                    candles[i].openPrice = val + r.Next(-10,10);
                    candles[i].closePrice = val + r.Next(-10, 10);
                    candles[i].minPrice = Math.Min(candles[i].openPrice, candles[i].closePrice) + r.Next(-15, -5);
                    candles[i].maxPrice = Math.Max(candles[i].openPrice, candles[i].closePrice) + r.Next(5, 15);

                    if (candles[i].closePrice &amp;gt; candles[i].openPrice) candles[i].color = CandleColor.WHITE;
                    else candles[i].color = CandleColor.BLACK;
                }
            }
        }

        static void Main(string[] args)
        {
            JapanCandles[] candles = new JapanCandles[N]; // создаем, как обычный массив встроенного типа

            JapanCandles.fillRandom(candles); // тут 2 вызова статичных методов, потому имя структуры, а не массива
            int marz = JapanCandles.countMarubozus(candles);

            Console.WriteLine(&amp;quot;{0} marubozus in candles&amp;quot;, marz);
            Console.ReadLine();
        }
    }
}
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:120%"&gt;&lt;b&gt;Вложения:&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;a target="_blank" rel="nofollow" href="https://stocksharp.com/away/?u=AQAAAAAAAADa7P_4NHqE_OLFtnFd-d2rdEmNK743h-ktqSOTKbllXbxeO8EEtMCCv4-sUOwrCTY" title="http://vk.com/docs?oid=-66674957"&gt;Проект&lt;/a&gt;</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/29137/</id>
    <title type="text">Я бы хотел возразить критике devruss&amp;apos;а! Как раз понимание общей структуры видео у автора есть, и оче...</title>
    <published>2014-01-18T21:24:25Z</published>
    <updated>2014-01-18T21:27:08Z</updated>
    <author>
      <name>archmag</name>
      <uri>https://stocksharp.com/users/50050/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Я бы хотел возразить критике devruss&amp;#39;а!&lt;br /&gt;Как раз понимание общей структуры видео у автора есть, и очень неплохое! Да, способ передачи материала у автора необычный, его можно охарактеризовать не как сухая начитка лекции, а как демонстрация практического применения языка на примерах! Автор хорошо показывает краеугольные моменты и разбирает примеры ошибок (как например с ссылочными/обычными типами данных) которые могут встретиться нам, ученикам, при самостоятельном программировании! Лично мне после просмотра все стало понятно, хотя язык с# не знаю и книжек не читал. &lt;br /&gt;&lt;br /&gt;//Сделать 5 разлиных, но структурированных примеров лучше, чем 1 час видео с кодом на несколько листов и добавлением/удалением методов, //переменных и т.д. и перескакиванием вверх/вниз&lt;br /&gt;//&lt;br /&gt;//Видно, что как программист инструктор компетентный, но этого мало, так как задача передать опыт, а не просто &amp;quot;отчитать&amp;quot; лекцию на //импровизированных примерах&lt;br /&gt;&lt;br /&gt;По мне лучше как раз такой код на несколько листов с добавлением/удалением чем начитка лекции в стиле &amp;quot;по книге Г.Шилдта&amp;quot;. Да, требуется внимательное слежение за мыслью автора, но тогда чудесным образом листание кода вверх/вниз приобретет для вас смысл и добавит понимания.&lt;br /&gt;&lt;br /&gt;//- &amp;quot;чтобы не писать совсем бред&amp;quot; означает, что примеры непродуманы и неподготовлены&lt;br /&gt;//- абсолютно монотонный голос&lt;br /&gt;&lt;br /&gt;Здесь согласен, хотя примеры все же продуманы, но действительно автор видео не подготовлен и рассказывает &amp;quot;видео на лету&amp;quot;. И слышно тихо, приходиться вслушиваться. Так же с темой трейдинга он знаком плохо и непрофессионально. Но есть понимание языка на высоком уровне и нормальная техника преподавания, повторюсь, стиль не лекционной начитки материала, а именно преподавания, у автора есть, что компенсирует эти недочеты, здесь все-таки представлен курс по с# а не по s#. &lt;br /&gt;&lt;br /&gt;Пишу этот коммент, потому что у меня как у новичка данных курсов при прочтении этих через-чур негативно-критических рецензий к урокам(здесь и в других ветках), сформировалось уж очень неправильно-нехорошее впечатление об данном лекторе, но сам видеоурок (конкретно 2-й) приятно порадовал. Другие уроки пока не смотрел :)</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/29110/</id>
    <title type="text">Спасибо за конструктивные замечания, будем совершенствоваться.</title>
    <published>2014-01-17T06:33:08Z</published>
    <updated>2014-01-17T06:33:08Z</updated>
    <author>
      <name>IvanB</name>
      <uri>https://stocksharp.com/users/26984/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Спасибо за конструктивные замечания, будем совершенствоваться.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/29098/</id>
    <title type="text">Подготовка инструктора видео просто ужасная: - нет понимания общей структуры видео - листание кода в...</title>
    <published>2014-01-16T15:09:21Z</published>
    <updated>2014-01-16T15:10:54Z</updated>
    <author>
      <name>nethask</name>
      <uri>https://stocksharp.com/users/6245/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">&lt;div class="quote"&gt;&lt;span class="quotetitle"&gt;devruss &lt;a href="https://stocksharp.com/posts/m/29082/" class="quote_nav"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="innerquote"&gt;Подготовка инструктора видео просто ужасная:&lt;br /&gt;- нет понимания общей структуры видео&lt;br /&gt;- листание кода вверх/вниз на страницу не добавляет понимания&lt;br /&gt;- &amp;quot;чтобы не писать совсем бред&amp;quot; означает, что примеры непродуманы и неподготовлены&lt;br /&gt;- абсолютно монотонный голос&lt;br /&gt;&lt;br /&gt;Посмотрите пару бесплатных курсов от Google, CodeSchool, CodeAcademy не говоря уже про Linda и т.д. - подача информации также важна, как и качество. Сделать 5 разлиных, но структурированных примеров лучше, чем 1 час видео с кодом на несколько листов и добавлением/удалением методов, переменных и т.д. и перескакиванием вверх/вниз&lt;br /&gt;&lt;br /&gt;Видно, что как программист инструктор компетентный, но этого мало, так как задача передать опыт, а не просто &amp;quot;отчитать&amp;quot; лекцию на импровизированных примерах&lt;br /&gt;&lt;br /&gt;P.S. Свечи имеют параметры OHLC (Open, High, Low, Close)&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Абсолютно согласен с devruss, смотреть очень неприятно.</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
  <entry>
    <id>https://stocksharp.com/posts/m/29082/</id>
    <title type="text">Подготовка инструктора видео просто ужасная: - нет понимания общей структуры видео - листание кода в...</title>
    <published>2014-01-15T19:53:36Z</published>
    <updated>2014-01-15T19:53:36Z</updated>
    <author>
      <name>devruss</name>
      <uri>https://stocksharp.com/users/50604/</uri>
      <email>info@stocksharp.com</email>
    </author>
    <content type="html">Подготовка инструктора видео просто ужасная:&lt;br /&gt;- нет понимания общей структуры видео&lt;br /&gt;- листание кода вверх/вниз на страницу не добавляет понимания&lt;br /&gt;- &amp;quot;чтобы не писать совсем бред&amp;quot; означает, что примеры непродуманы и неподготовлены&lt;br /&gt;- абсолютно монотонный голос&lt;br /&gt;&lt;br /&gt;Посмотрите пару бесплатных курсов от Google, CodeSchool, CodeAcademy не говоря уже про Linda и т.д. - подача информации также важна, как и качество. Сделать 5 разлиных, но структурированных примеров лучше, чем 1 час видео с кодом на несколько листов и добавлением/удалением методов, переменных и т.д. и перескакиванием вверх/вниз&lt;br /&gt;&lt;br /&gt;Видно, что как программист инструктор компетентный, но этого мало, так как задача передать опыт, а не просто &amp;quot;отчитать&amp;quot; лекцию на импровизированных примерах&lt;br /&gt;&lt;br /&gt;P.S. Свечи имеют параметры OHLC (Open, High, Low, Close)</content>
    <rights type="html">Copyright @ StockSharp Platform LLC 2010 - 2025</rights>
  </entry>
</feed>