Jump to content

Welcome to the new Traders Laboratory! Please bear with us as we finish the migration over the next few days. If you find any issues, want to leave feedback, get in touch with us, or offer suggestions please post to the Support forum here.

  • Welcome Guests

    Welcome. You are currently viewing the forum as a guest which does not give you access to all the great features at Traders Laboratory such as interacting with members, access to all forums, downloading attachments, and eligibility to win free giveaways. Registration is fast, simple and absolutely free. Create a FREE Traders Laboratory account here.

darthtrader2.0

Ninja Traders...lets Build a Better Mousetrap

Recommended Posts

The logic looks fine but I think you should use this indicator from start of day till end of day without any refresh. Otherwise on historical data your code will return Close[0] / 1.

 

I'm not really sure what you mean...could you restate that as code? :)

Also this is kind of an early experiment in what I ultimately want my charts to look like...

Have you ever checked out box plots from a stats book?

http://en.wikipedia.org/wiki/Box_plot

 

To me the optimal chart would take every tick into consideration, but assume no distribution to the data, and not weight any tick more than any other tick no matter how you decided to chop up the data to make your summary of that data...

For a double auction market...it would seem to me the optimal way to do this would be with a box plot that scales how it chops up things to volatility...how to get to that point is what I'm trying to figure out with these early experiments.

Share this post


Link to post
Share on other sites

Ok I'll try to be a bit clearer (english is not my native language).

 

If you apply the indicator on a chart, because of no tick backfill, OnBarUpdate will be called only once at the close of the bar and not at every tick so because of that, your average will be: Close[0]/1 as you enter only once in OnBarUpdate.

 

Now if you apply your indicator before start of day, all values before open won't be accurate but as the ticks come through (If CalculateOnBarClose=false), you should see accurate values for your indicator, as OnBarUpdate will be called several times for the same bar.

Hope this makes sense now?

 

As for box plot, yes I do use it in S-Plus at work, it can be quite useful. But I'm not sure I understand what you'd like to do with it...

How would you measure the volatility?

Share this post


Link to post
Share on other sites

thanks Ryker, yes that makes perfect sense theory wise and as far as what I see on my chart in real time vs backfilled.

oh S-plus, your hardcore :) I tried to get into R last year but never got very far with it.

Scaling to volatility would probly be after I get a minute bar box plot going or certain number of tick box plot. To measure volatility the best things to me are the VIX...the average range of a 5 minute bar seems to be a decent measure of volatility for longer time frames, really I'm not quite sure the direction of that idea at the present.

 

Have you done anything with random numbers in C#? I got stuff like this to compile but I have not been able to get a random number on a tick by tick basis..

Randvar = rand.Sample(NN);

Print(Randvar);

Random RandomClass = new Random();

int RandomNumber = RandomClass.Next(1, 2);

 

My idea here is that instead of using a static stop, you can probly back out a decent scaling stop using a random trading system and a multiplier that scales to the vix tick by tick.

What I would like to do here is have a random trading system that randomly enters say 200 trades a day, randomly long or short, at a random time during the day, holds for a random amount of time between 1-5 minutes and then have a multiplier of the vix that sets the stop amount for each trade.

Then use the optimizer to march through different values of the multiplier and see what system performed the best. Kind of back out of the market information what the best dynamic stop size is to use for my trading time. Then maybe each day back test a week back and use that to set my stop instead of a hard arbitrary "20 point" level.

I guess this assumes though that there is a correlation between between the VIX and a 1 minute bar range or whatnot. If that doesn't hold water you could still march through a stop size with the random system, would seem better than nothing.

Edited by darthtrader3.0beta

Share this post


Link to post
Share on other sites

nevermind, I got random variables to seed now on each update. Just have to make the system now.

In case anyone finds this in the future, for some reason you have to define things like

in user variables

private Random rand = new Random();

private Random rand2 = new Random();

 

in onbarupdate

x = rand.Next(1,5);

Print(x);

x2 = rand2.Next(100,500);

Print(x2);

 

If you define the variables in onbarupdate it will only give you a new random number at the start of the day...no clue why.

Share this post


Link to post
Share on other sites

I've spent the last week trying to figure out the sorteddictionary in C# and finally got something to look like its doing something. This is an incredible datastructure, since once you get this cooking it makes market profile type stuff rather easy data wise. Here is some code that should look to see if a price is in the dictionary, if its not add it with the volume of the bar, then looks to add the additional volume if the price comes up again. Then spit it to the output window:

 

variables

private SortedDictionary<double, double> PriceVol = new SortedDictionary<double, double>();

 

private double price = 0;

private double volume = 0;

private double tmpprice = 0;

private double tmpvolume = 0;

private int count = 0;

 

 

protected override void OnBarUpdate()

{

price = Close[0];

volume = Volume[0];

 

if (!PriceVol.ContainsKey(price))

{

PriceVol.Add(price, volume);

}

if (PriceVol.ContainsKey(price))

{

double volume2 = PriceVol[price];

volume2 += volume;

PriceVol[price] = volume2;

}

 

count = 0;

foreach (KeyValuePair<double, double> keyValue in PriceVol)

{

tmpprice = keyValue.Key;

tmpvolume = keyValue.Value;

Print(count + ". " + tmpprice + " - " + tmpvolume);

count++;

}

Print("------------------------------");

sortedictionary.jpg.760ce95b28b57a97a8b4888f6e09c10e.jpg

Share this post


Link to post
Share on other sites

Just a thought.. wouldn't this have trouble with historical data, which is not updated per tick? To fix this, you could a) check if it's live or not, b) if not, cycle through every tick in (High-Low) and assign that tick's volume to be Volume/(High-Low). It wouldn't be exact, but it would be a good estimate.

Share this post


Link to post
Share on other sites

Saw you post about this structure elsewhere. Certainly seems quite elegant code wise :D I have to say I am an 'old school' type of coder and have always used arrays in the past. Mind you I predominantly coded in assembler, and built any structures and routines for manipulating them from the ground up. Actually they (arrays) work remarkably well and are a very fast a way of doing things when it comes to execution speed. Of course you pay a bit for this in storage by pre-allocating. Dividing the price by tick size gives the array index, quick and easy. Actually I tend to use relative price (from the first tick in the series).

 

Sometimes I get a bit nostalgic for the old days, still, hopefully the above might prove useful or interesting to someone :) Actually by pre-processing the price data as above you could use an integer dictionary which is likely to be much more efficient when it comes to how the compiler hashes things.

Share this post


Link to post
Share on other sites

Well I should add all this slop I'm posting is namely getting ready for Ninja 7..Maybe someone in the future is learning C#/ninja and can find it usefull..also its incase I lose something in all the junk half finished indicators/strategies on my machine now..

I certainly want to convert this to onmarketdata or however they are going to be handling tick back fills in NT7. The volumeprofile indicator that comes with ninja uses the sorteddictionary and is tick by tick if you want a proper example. With all the graphics override though its hard to understand if you just want to see how sorteddictionary works.

As far as the speed, I guess you could do it faster if you knew alot about hashing. There is no way though I could do it faster though, I'm sure my sorting algorithm would be terribly slow and totally wrong. Having that done behind the scenes is just awesome if your not a real programmer. Especially when you consider adding new elements that need to go between 2 that already exists..you don't have to mess with moving the array all over the place.

Next I'm going to try to make a version of market profile with this and to learn to override plot. One thing I dont get is why they didnt make a big custom function library for plot overrides. Draw lines, draw rectangles, get X Y coordinates, last bar painted, first bar painted...there is only a few things you would want to do but have to dig through all this convoluted code in the indicators right now.

Share this post


Link to post
Share on other sites

Well here I proudly present the most useless indicator ever made...load up the chart, load the indicator and it puts a black box over your entire chart...

Really though, I guess Ninja doesn't have documents for the stuff they are doing as far plot overrides?

If you put this in an empty indicator, then put the output window next to the chart and play with it you can get a feel for what these methods are doing.

 

public override void Plot(Graphics graphics, Rectangle bounds, double min, double max)

{

 

 

Print("ChartControl.BarSpace" + " : " + ChartControl.BarSpace);

Print("ChartControl.CanvasRight" + " : " + ChartControl.CanvasRight);

Print("ChartControl.CanvasLeft" + " : " + ChartControl.CanvasLeft);

Print("ChartControl.BarMarginRight" + " : " + ChartControl.BarMarginRight);

Print("ChartControl.BarMarginLeft" + " : " + ChartControl.BarMarginLeft);

Print("ChartControl.BarsPainted" + " : " + ChartControl.BarsPainted);

Print("ChartControl.BarWidth" + " : " + ChartControl.BarWidth);

Print("bounds.X" + " : " + bounds.X);

Print("bounds.Y" + " : " + bounds.X);

Print("bounds.Height" + " : " + bounds.Height);

Print("bounds.Width" + " : " + bounds.Width);

 

Print("-----------------");

 

System.Drawing.SolidBrush myBrush;

myBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black);

graphics.FillRectangle(myBrush, new Rectangle(ChartControl.CanvasLeft,ChartControl.CanvasLeft,ChartControl.CanvasRight,bounds.Height ));

 

}

chartcontrol.jpg.db2a63ab0d50f1ddbd48060dffc8688f.jpg

Share this post


Link to post
Share on other sites

Hi Darth version 3.0b,

 

Not meaning to detract from the thread intent. But may I ask why all the effort here when something reasonably priced will easily do all this and more? Self-punishment? :confused:

 

All my best,

MK

Share this post


Link to post
Share on other sites

Well I don't see learning new things as self-punishment..I also still will probly want to trade for a few more decades and it seems learning C# to some degree is kind of inevitable. Honestly, figuring this stuff out is quite a bit of fun. I also hope this thread is of use to someone in the future. Ninja's forum is great but they are so quick to respond to issues that when the question is not supported it fragments self learning IMO. Hopefully I will also be able to post complete indicators here at some point, currently though I don't want to mess up someones library incase I do something wrong.

I'm not sure if you mean finalg's market profile? I'm mostly interested in being able to do whatever I want with my charts, not really interested in market profile per se.

 

Adding on to that last post, once you get a feel for the coordinates of the chart the next logical step would seem to be getting a feel for how things are handled per bar, which seems to be what the getYposition function is for that is added on as an extra function in alot of the indicators that override plot.

 

private int GetYPos(double price, Rectangle bounds, double min, double max)

{

return (int) ((bounds.Y + bounds.Height) -

((price - min) / ChartControl.MaxMinusMin(max, min)) * bounds.Height);

}

 

When you pass in the price variable you can get things moving..

 

int ypos = GetYPos(Close[0], bounds, min, max);

If you then change the above rectange fill by passing in ypos

Rectangle(ChartControl.CanvasLeft,ypos,......

 

You then get a blackbox that shades everything out below the current close of the bar.

This is also a good little reference for how drawing rectangles works

http://www.informit.com/articles/article.aspx?p=25357&seqNum=5

Edited by darthtrader3.0beta

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Topics

  • Posts

    • Date: 11th July 2025.   Demand For Gold Rises As Trump Announces Tariffs!   Gold prices rose significantly throughout the week as investors took advantage of the 2.50% lower entry level. Investors also return to the safe-haven asset as the US trade policy continues to escalate. As a result, investors are taking a more dovish tone. The ‘risk-off’ appetite is also something which can be seen within the stock market. The NASDAQ on Thursday took a 0.90% dive within only 30 minutes.   Trade Tensions Escalate President Trump has been teasing with new tariffs throughout the week. However, the tariffs were confirmed on Thursday. A 35% tariff on Canadian imports starting August 1st, along with 50% tariffs on copper and goods from Brazil. Some experts are advising that Brazil has been specifically targeted due to its association with the BRICS.   However, the President has not directly associated the tariffs with BRICS yet. According to President Trump, Brazil is targeting US technology companies and carrying out a ‘witch hunt’against former Brazilian President Jair Bolsonaro, a close ally who is currently facing prosecution for allegedly attempting to overturn the 2022 Brazilian election.   Although Brazil is one of the largest and fastest-growing economies in the Americas, it is not the main concern for investors. Investors are more concerned about Tariffs on Canada. The White House said it will impose a 35% tariff on Canadian imports, effective August 1st, raised from the earlier 25% rate. This covers most goods, with exceptions under USMCA and exemptions for Canadian companies producing within the US.   It is also vital for investors to note that Canada is among the US;’s top 3 trading partners. The increase was justified by Trump citing issues like the trade deficit, Canada’s handling of fentanyl trafficking, and perceived unfair trade practices.   The President is also threatening new measures against the EU. These moves caused US and European stock futures to fall nearly 1%, while the Dollar rose and commodity prices saw small gains. However, the main benefactor was Silver and Gold, which are the two best-performing metals of the day.   How Will The Fed Impact Gold? The FOMC indicated that the number of members warming up to the idea of interest rate cuts is increasing. If the Fed takes a dovish tone, the price of Gold may further rise. In the meantime, the President pushing for a 3% rate cut sparked talk of a more dovish Fed nominee next year and raised worries about future inflation.   Meanwhile, jobless claims dropped for the fourth straight week, coming in better than expected and supporting the view that the labour market remains strong after last week’s solid payroll report. Markets still expect two rate cuts this year, but rate futures show most investors see no change at the next Fed meeting. Gold is expected to finish the week mostly flat.       Gold 15-Minute Chart     If the price of Gold increases above $3,337.50, buy signals are likely to materialise again. However, the price is currently retracing, meaning traders are likely to wait for regained momentum before entering further buy trades. According to HSBC, they expect an average price of $3,215 in 2025 (up from $3,015) and $3,125 in 2026, with projections showing a volatile range between $3,100 and $3,600   Key Takeaway Points: Gold Rises on Safe-Haven Demand. Gold gained as investors reacted to rising trade tensions and market volatility. Canada Tariffs Spark Concern. A 35% tariff on Canadian imports drew attention due to Canada’s key trade role. Fed Dovish Shift Supports Gold. Growing expectations of rate cuts and Trump’s push for a 3% cut boosted the gold outlook. Gold Eyes Breakout Above $3,337.5. Price is consolidating; a move above $3,337.50 could trigger new buy signals. Always trade with strict risk management. Your capital is the single most important aspect of your trading business.   Please note that times displayed based on local time zone and are from time of writing this report.   Click HERE to access the full HFM Economic calendar.   Want to learn to trade and analyse the markets? Join our webinars and get analysis and trading ideas combined with better understanding of how markets work. Click HERE to register for FREE!   Click HERE to READ more Market news.   Michalis Efthymiou HFMarkets   Disclaimer: This material is provided as a general marketing communication for information purposes only and does not constitute an independent investment research. Nothing in this communication contains, or should be considered as containing, an investment advice or an investment recommendation or a solicitation for the purpose of buying or selling of any financial instrument. All information provided is gathered from reputable sources and any information containing an indication of past performance is not a guarantee or reliable indicator of future performance. Users acknowledge that any investment in Leveraged Products is characterized by a certain degree of uncertainty and that any investment of this nature involves a high level of risk for which the users are solely responsible and liable. We assume no liability for any loss arising from any investment made based on the information provided in this communication. This communication must not be reproduced or further distributed without our prior written permission.
    • Back in the early 2000s, Netflix mailed DVDs to subscribers.   It wasn’t sexy—but it was smart. No late fees. No driving to Blockbuster.   People subscribed because they were lazy. Investors bought the stock because they realized everyone else is lazy too.   Those who saw the future in that red envelope? They could’ve caught a 10,000%+ move.   Another story…   Back in the mid-2000s, Amazon launched Prime.   It wasn’t flashy—but it was fast.   Free two-day shipping. No minimums. No hassle.   People subscribed because they were impatient. Investors bought the stock because they realized everyone hates waiting.   Those who saw the future in that speedy little yellow button? They could’ve caught another 10,000%+ move.   Finally…   Back in 2011, Bitcoin was trading under $10.   It wasn’t regulated—but it worked.   No bank. No middleman. Just wallet to wallet.   People used it to send money. Investors bought it because they saw the potential.   Those who saw something glimmering in that strange orange coin? They could’ve caught a 100,000%+ move.   The people who made those calls weren’t fortune tellers. They just noticed something simple before others did.   A better way. A quiet shift. A small edge. An asymmetric bet.   The red envelope fixed late fees. The yellow button fixed waiting. The orange coin gave billions a choice.   Of course, these types of gains are rare. And they happen only once in a blue moon. That’s exactly why it’s important to notice when the conditions start to look familiar.   Not after the move. Not once it's on CNBC. But in the quiet build-up— before the surface breaks.   Enter the Blue Button Please read more here: https://altucherconfidential.com/posts/netflix-amazon-bitcoin-blue  Profits from free accurate cryptos signals: https://www.predictmag.com/ 
    • What These Attacks Look Like There are several ways you could get hacked. And the threats compound by the day.   Here’s a quick rundown:   Phishing: Fake emails from your “bank.” Click the link, give your password—game over.   Ransomware: Malware that locks your files and demands crypto. Pay up, or it’s gone.   DDoS: Overwhelm a website with traffic until it crashes. Like 10,000 bots blocking the door. Often used by nations.   Man-in-the-Middle: Hackers intercept your messages on public WiFi and read or change them.   Social Engineering: Hackers pose as IT or drop infected USB drives labeled “Payroll.”   You don’t need to be “important” to be a target.   You just need to be online.   What You Can Do (Without Buying a Bunker) You don’t have to be tech-savvy.   You just need to stop being low-hanging fruit.   Here’s how:   Use a YubiKey (physical passkey device) or Authenticator app – Ditch text message 2FA. SIM swaps are real. Hackers often have people on the inside at telecom companies.   Use a password manager (with Yubikey) – One unique password per account. Stop using your dog’s name.   Update your devices – Those annoying updates patch real security holes. Use them.   Back up your files – If ransomware hits, you don’t want your important documents held hostage.   Avoid public WiFi for sensitive stuff – Or use a VPN.   Think before you click – Emails that feel “urgent” are often fake. Go to the websites manually for confirmation.   Consider Starlink in case the internet goes down – I think it’s time for me to make the leap. Don’t Panic. Prepare. (Then Invest.)   I spent an hour in that basement bar reading about cyberattacks—and watching real-world systems fall apart like dominos.   The internet going down used to be an inconvenience. Now, it’s a warning.   Cyberwar isn’t coming. It’s here.   And the next time your internet goes out, it might not just be your router.   Don’t panic. Prepare.   And maybe keep a backup plan in your back pocket. Like a local basement bar with good bourbon—and working WiFi.   As usual, we’re on the lookout for more opportunities in cybersecurity. Stay tuned.   Author: Chris Campbell (AltucherConfidential) Profits from free accurate cryptos signals: https://www.predictmag.com/   
    • DUMBSHELL:  re the automation of corruption ---  200,000 "Science Papers" in academic journal database PubMed may have been AI-generated with errors, hallucinations and false sourcing 
    • Does any crypto exchanges get banned in your country? How's about other as Bybit, Kraken, MEXC, OKX?
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.