Category Other  Published on 20/01/2021

Closing Button (日本語版)

Description

「通貨ペア」ボタン = チャートの通貨ペアのポジションを全て決済します

「全て」ボタン = 通貨ペアに関わらずすべてのポジションを決済します


using System;
using System.Collections.Generic;
using cAlgo.API;
using cAlgo.API.Internals;

namespace cAlgo.Robots
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class ClosingButton : Robot
    {
        protected override void OnStart()
        {
            var tradingPanel = new TradingPanel(this, Symbol);

            var border = new Border 
            {
                VerticalAlignment = VerticalAlignment.Bottom,
                HorizontalAlignment = HorizontalAlignment.Right,
                Style = Styles.CreatePanelBackgroundStyle(),
                Margin = "8 8 8 8",
                Width = 150,
                Child = tradingPanel
            };

            Chart.AddControl(border);
        }
    }

    public class TradingPanel : CustomControl
    {
        private readonly Robot _robot;
        private readonly Symbol _symbol;

        public TradingPanel(Robot robot, Symbol symbol)
        {
            _robot = robot;
            _symbol = symbol;
            AddChild(CreateTradingPanel());
        }

        private ControlBase CreateTradingPanel()
        {
            var mainPanel = new StackPanel();

            var contentPanel = CreateContentPanel();
            mainPanel.AddChild(contentPanel);

            return mainPanel;
        }

        private StackPanel CreateContentPanel()
        {
            var contentPanel = new StackPanel 
            {
                Margin = 5
            };
            var grid = new Grid(1, 3);
            grid.Columns[1].SetWidthInPixels(5);

            var closeButton = CreateCloseButton("通貨ペア", Styles.CreateBuyButtonStyle());
            grid.AddChild(closeButton, 0, 0);

            var closeAllButton = CreateCloseAllButton("全て", Styles.CreateBuyButtonStyle());
            grid.AddChild(closeAllButton, 0, 2);

            contentPanel.AddChild(grid);

            return contentPanel;
        }

        private Button CreateCloseButton(string text, Style style)
        {
            var closeButton = new Button 
            {
                Text = text,
                Style = style,
                Height = 25
            };

            closeButton.Click += args => Close();

            return closeButton;
        }

        private ControlBase CreateCloseAllButton(string text, Style style)
        {
            var closeAllButton = new Button 
            {
                Text = text,
                Style = style,
                Height = 25
            };

            closeAllButton.Click += args => CloseAll();

            return closeAllButton;
        }

        private void Close()
        {
            foreach (var position in _robot.Positions)
            {
                if (position.SymbolName == _symbol.Name)
                {
                    _robot.ClosePositionAsync(position);
                }

            }

        }

        private void CloseAll()
        {
            foreach (var position in _robot.Positions)
                _robot.ClosePositionAsync(position);
        }
    }

    public static class Styles
    {
        public static Style CreatePanelBackgroundStyle()
        {
            var style = new Style();
            style.Set(ControlProperty.CornerRadius, 3);
            style.Set(ControlProperty.BackgroundColor, GetColorWithOpacity(Color.FromHex("#292929"), 0.85m), ControlState.DarkTheme);
            style.Set(ControlProperty.BackgroundColor, GetColorWithOpacity(Color.FromHex("#FFFFFF"), 0.85m), ControlState.LightTheme);
            style.Set(ControlProperty.BorderColor, Color.FromHex("#3C3C3C"), ControlState.DarkTheme);
            style.Set(ControlProperty.BorderColor, Color.FromHex("#C3C3C3"), ControlState.LightTheme);
            style.Set(ControlProperty.BorderThickness, new Thickness(1));

            return style;
        }

        public static Style CreateCommonBorderStyle()
        {
            var style = new Style();
            style.Set(ControlProperty.BorderColor, GetColorWithOpacity(Color.FromHex("#FFFFFF"), 0.12m), ControlState.DarkTheme);
            style.Set(ControlProperty.BorderColor, GetColorWithOpacity(Color.FromHex("#000000"), 0.12m), ControlState.LightTheme);
            return style;
        }

        public static Style CreateBuyButtonStyle()
        {
            return CreateButtonStyle(Color.FromHex("#009345"), Color.FromHex("#10A651"));
        }

        public static Style CreateSellButtonStyle()
        {
            return CreateButtonStyle(Color.FromHex("#F05824"), Color.FromHex("#FF6C36"));
        }

        public static Style CreateCloseButtonStyle()
        {
            return CreateButtonStyle(Color.FromHex("#F05824"), Color.FromHex("#FF6C36"));
        }

        private static Style CreateButtonStyle(Color color, Color hoverColor)
        {
            var style = new Style(DefaultStyles.ButtonStyle);
            style.Set(ControlProperty.BackgroundColor, color, ControlState.DarkTheme);
            style.Set(ControlProperty.BackgroundColor, color, ControlState.LightTheme);
            style.Set(ControlProperty.BackgroundColor, hoverColor, ControlState.DarkTheme | ControlState.Hover);
            style.Set(ControlProperty.BackgroundColor, hoverColor, ControlState.LightTheme | ControlState.Hover);
            style.Set(ControlProperty.ForegroundColor, Color.FromHex("#FFFFFF"), ControlState.DarkTheme);
            style.Set(ControlProperty.ForegroundColor, Color.FromHex("#FFFFFF"), ControlState.LightTheme);
            return style;
        }

        private static Color GetColorWithOpacity(Color baseColor, decimal opacity)
        {
            var alpha = (int)Math.Round(byte.MaxValue * opacity, MidpointRounding.AwayFromZero);
            return Color.FromArgb(alpha, baseColor);
        }
    }
}


summer's avatar
summer

Joined on 10.08.2020

  • Distribution: Free
  • Language: C#
  • Trading platform: cTrader Automate
  • File name: Closing Button.algo
  • Rating: 0
  • Installs: 1382
  • Modified: 13/10/2021 09:55
Comments
Log in to add a comment.
ST
stefano.lario1969 · 9 months ago

Hello summer ,your closing button it works very well…thank you for your work !!!

Can i ask if is possible to have a version with text in english ??

Thank you,ciao