Login Page - Create Account

Support Board


Date/Time: Thu, 19 Sep 2024 21:36:06 +0000



ACSIL question

View Count: 2214

[2014-08-21 02:43:25]
User120827 - Posts: 77
hi

I have this in my code to flatten at end of session, courtesy of vegasfoster.

I would like to have it as an option on settings menu.
I was able to get the flatten part on the settings menu, but it is just a regular flatten command without the session times like the code below.

thanks


if (InputDateTime2 < EndDateTime && InputDateTime1 >= EndDateTime)
  
    sc.FlattenAndCancelAllOrders();

[2014-08-21 06:34:28]
vegasfoster - Posts: 444
Not 100% sure this is what you are asking for, but try adding to sc.SetDefaults section,


sc.Input[#].Name = "Flatten and Cancel?";
sc.Input[#].SetCustomInputStrings("Yes;No");
sc.Input[#].SetCustomInputIndex(0);

then modify

if (InputDateTime2 < EndDateTime && InputDateTime1 >= EndDateTime) && sc.Input[#].GetIndex() == 0)

substitute # with the next number in your sc.Input sequence.
Date Time Of Last Edit: 2014-08-21 06:36:14
[2014-08-21 06:52:35]
Sierra Chart Engineering - Posts: 104368
We can only refer you to the documentation here about this:

https://www.sierrachart.com/index.php?page=doc/doc_MouseAndMenuInteractionFromACStudy.html
Sierra Chart Support - Engineering Level

Your definitive source for support. Other responses are from users. Try to keep your questions brief and to the point. Be aware of support policy:
https://www.sierrachart.com/index.php?l=PostingInformation.php#GeneralInformation

For the most reliable, advanced, and zero cost futures order routing, *change* to the Teton service:
Sierra Chart Teton Futures Order Routing
[2014-08-21 11:47:05]
User120827 - Posts: 77
We can only refer you to the documentation here about this:

https://www.sierrachart.com/index.php?page=doc/doc_MouseAndMenuInteractionFromACStudy.html
Cheers

Why a link to mouse commands ?


[2014-08-21 14:59:49]
vegasfoster - Posts: 444
I think because you referred to "menu" it could read as if you want to customize the menus. That's why I wasn't sure either.
[2014-08-21 16:05:58]
Sierra Chart Engineering - Posts: 104368
Yes, it sounded like you wanted to add a custom menu item to the chart shortcut menu.
Sierra Chart Support - Engineering Level

Your definitive source for support. Other responses are from users. Try to keep your questions brief and to the point. Be aware of support policy:
https://www.sierrachart.com/index.php?l=PostingInformation.php#GeneralInformation

For the most reliable, advanced, and zero cost futures order routing, *change* to the Teton service:
Sierra Chart Teton Futures Order Routing
Date Time Of Last Edit: 2014-08-21 16:06:08
[2014-08-21 17:24:27]
User021827 - Posts: 174
Hi

I see .
I thought you could add it to the settings portion of the study. I did not realize it was a custom menu item also.

I think I am used to the spreadsheet where so much is set under settings ! I am still thinking along those lines.


I just recently started to switch over to ACSIL, and I have minimal programming experience. Forgive my inexperience.

Should I learn to do it as a custom menu command ? Is that better in the long run ?

And thanks for your help also.


Date Time Of Last Edit: 2014-08-21 17:25:29
[2014-08-21 17:33:03]
Sierra Chart Engineering - Posts: 104368
You can add study Inputs to the Study Settings window. This is documented here:
https://www.sierrachart.com/index.php?page=doc/doc_ACSIL_Members_scInputs.html

Adding menu commands is advanced and uncommon. It sounds like what you want is a Study Input and that is much simpler.


Sierra Chart Support - Engineering Level

Your definitive source for support. Other responses are from users. Try to keep your questions brief and to the point. Be aware of support policy:
https://www.sierrachart.com/index.php?l=PostingInformation.php#GeneralInformation

For the most reliable, advanced, and zero cost futures order routing, *change* to the Teton service:
Sierra Chart Teton Futures Order Routing
[2014-08-21 18:34:17]
User021827 - Posts: 174
hi

yes , thanks for the link.

regards
Shane
[2014-08-21 20:20:37]
User120827 - Posts: 77
Hi
I recieved this error msg in compliler.. Did I forget something ?


error: label 'sc' used but not defined
if (InputDateTime2 < EndDateTime && InputDateTime1 >= EndDateTime) && sc.Input[7].GetIndex() == 0)

regards

Date Time Of Last Edit: 2014-08-21 20:40:22
[2014-08-21 20:49:08]
User120827 - Posts: 77
Does anything stand out as wrong in this code ?

With the error I got compiling, it seems I forgot something when adding the extra code you gave me.
It seems I did not define something.

Does the "send order to trade service " item I added to settings menu look correct?

thanks




// The top of every source code file must include this line
#include "sierrachart.h"


/*****************************************************************************

  For reference, please refer to the Advanced Custom Study Interface
  and Language documentation on the Sierra Chart website.
  
*****************************************************************************/


// This line is required. Change the text within the quote
// marks to what you want to name your group of custom studies.
SCDLLName("Go Live")


SCSFExport scsf_SC_TradingCrossOverExample(SCStudyGraphRef sc)
{

  SCInputRef Line1Ref = sc.Input[0];
  SCInputRef Line2Ref = sc.Input[1];
  SCInputRef Enabled = sc.Input[2];
  
  
  SCSubgraphRef BuyEntry = sc.Subgraph[0];
  SCSubgraphRef SellEntry = sc.Subgraph[1];
  
  
  SCInputRef SendOrdersToService = sc.Input[10];
  

  

  if (sc.SetDefaults)
  {

    // Set the configuration and defaults

    sc.GraphName = "Trading CrossOver Example";
    
    Enabled.Name = "Enabled";
    Enabled.SetYesNo(0);

    sc.StudyDescription = "An example .";

    sc.AutoLoop = 1; // true
    sc.GraphRegion = 0;
    sc.FreeDLL = 1;
    sc.CalculationPrecedence = LOW_PREC_LEVEL;
    
    sc.Input[3].Name = "Start Hour";
    sc.Input[3].SetInt(10);
    sc.Input[3].SetIntLimits(0,23);

    sc.Input[4].Name = "Start Minute";
    sc.Input[4].SetInt(0);
    sc.Input[4].SetIntLimits(0,59);

    sc.Input[5].Name = "End Hour";
    sc.Input[5].SetInt(16);
    sc.Input[5].SetIntLimits(0,23);

    sc.Input[6].Name = "End Minute";
    sc.Input[6].SetInt(0);
    sc.Input[6].SetIntLimits(0,59);

    Line1Ref.Name = "Line1";
    Line1Ref.SetStudySubgraphValues(1, 0);

    Line2Ref.Name = "Line2";
    Line2Ref.SetStudySubgraphValues(1, 0);

    BuyEntry.Name = "Buy";
    BuyEntry.DrawStyle = DRAWSTYLE_POINTHIGH;
    BuyEntry.LineWidth = 3;

    SellEntry.Name = "Sell";
    SellEntry.DrawStyle = DRAWSTYLE_POINTLOW;
    SellEntry.LineWidth = 3;
    
    sc.Input[7].Name = "Flatten and Cancel?";
    sc.Input[7].SetCustomInputStrings("Yes;No");
    sc.Input[7].SetCustomInputIndex(0);


    sc.AllowMultipleEntriesInSameDirection = false;
    sc.MaximumPositionAllowed = 5;
    sc.SupportReversals = true;

    // This is false by default. Orders will not go to the external connected trading service.
    sc.SendOrdersToTradeService = false;

    sc.AllowOppositeEntryWithOpposingPositionOrOrders = false;

    // This can be false in this function because we specify Attached Orders directly with the order which causes this to be considered true when submitting an order.
    sc.SupportAttachedOrdersForTrading = true;

    sc.CancelAllOrdersOnEntriesAndReversals= true;
    sc.AllowEntryWithWorkingOrders = false;
    sc.CancelAllWorkingOrdersOnExit = true;

    // Only 1 trade for each Order Action type is allowed per bar.
    sc.AllowOnlyOneTradePerBar = true;

    //This needs to be set to true when a trading study uses trading functions.
    sc.MaintainTradeStatisticsAndTradesData = true;
    
    SendOrdersToService.Name = "Send Orders to Trade Service";
    SendOrdersToService.SetYesNo(false);


    return;
  }
  
  if (!Enabled.GetYesNo())
    return;

  // only process at the close of the bar; if it has not closed don't do anything
  if (sc.GetBarHasClosedStatus() == BHCS_BAR_HAS_NOT_CLOSED)
  {
    return;
  }
  
  int StartTime, EndTime, InputDate;
  SCDateTime StartDateTime, EndDateTime, InputDateTime1, InputDateTime2;

  InputDate = sc.BaseDateTimeIn[sc.Index].GetDate();
  InputDateTime1 = sc.BaseDateTimeIn[sc.Index];
  InputDateTime2 = sc.BaseDateTimeIn[sc.Index-1];

  StartTime = HMS_TIME(sc.Input[3].GetInt(), sc.Input[4].GetInt(), 0);
  StartDateTime = COMBINE_DATE_TIME(InputDate, StartTime);
  EndTime = HMS_TIME(sc.Input[5].GetInt(), sc.Input[6].GetInt(), 0);
  EndDateTime = COMBINE_DATE_TIME(InputDate, EndTime);
  
  {
  
  }

  // using the line1Ref and line2Ref input variables, retrieve the subgraph arrays into line1, line2 arrays respectively
  SCFloatArray line1;
  sc.GetStudyArrayUsingID(Line1Ref.GetStudyID(), Line1Ref.GetSubgraphIndex(), line1);

  SCFloatArray line2;
  sc.GetStudyArrayUsingID(Line2Ref.GetStudyID(), Line2Ref.GetSubgraphIndex(), line2);
  
   sc.SendOrdersToTradeService = SendOrdersToService.GetYesNo();

  // code
  if (InputDateTime1 > StartDateTime && InputDateTime1 < EndDateTime)
  if (sc.CrossOver(line1, line2) == CROSS_FROM_BOTTOM)
  {

    // mark the crossover on the chart
    BuyEntry[sc.Index] = 1;

    // Create a market order and enter long.
    s_SCNewOrder order;
    order.OrderQuantity = 1;
    order.OrderType = SCT_ORDERTYPE_MARKET;

    sc.BuyEntry(order);
  }
  if (InputDateTime1 > StartDateTime && InputDateTime1 < EndDateTime)
  if (sc.CrossOver(line1, line2) == CROSS_FROM_TOP)
  {


    // mark the crossover on the chart
    SellEntry[sc.Index] = 1;

    // create a market order and enter short
    s_SCNewOrder order;
    order.OrderQuantity = 1;
    order.OrderType = SCT_ORDERTYPE_MARKET;

    sc.SellEntry(order);
  }
   if (InputDateTime2 < EndDateTime && InputDateTime1 >= EndDateTime) && sc.Input[7].GetIndex() == 0)
   sc.FlattenAndCancelAllOrders();
}

Date Time Of Last Edit: 2014-08-21 21:04:19
[2014-08-21 21:24:22]
crazybears - Posts: 314
if ((InputDateTime2 < EndDateTime && InputDateTime1 >= EndDateTime) && sc.Input[7].GetIndex() == 0)

needs another ( after if ;-)
[2014-08-21 21:42:22]
User120827 - Posts: 77
hi

Thank you very much for spotting my error. I appreciate it. When I copied the code, I did not select it all properly I believe.

thanks again !

sincerely,
shane

To post a message in this thread, you need to log in with your Sierra Chart account:

Login

Login Page - Create Account