Skip to content

Commit

Permalink
WIP. Making a Tester class and exporting IndicatorTfDummy and RSI ind…
Browse files Browse the repository at this point in the history
…icator to be used in JS.
  • Loading branch information
nseam committed Apr 20, 2023
1 parent 93a46bb commit 42de20c
Show file tree
Hide file tree
Showing 7 changed files with 104 additions and 6 deletions.
30 changes: 30 additions & 0 deletions Chart.enum.h
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,36 @@ enum ENUM_TIMEFRAMES {
PERIOD_MN1 = 43200 // 1 month.
};

#ifdef EMSCRIPTEN
#include <emscripten.h>
#include <emscripten/bind.h>

EMSCRIPTEN_BINDINGS(ENUM_TIMEFRAMES) {
emscripten::enum_<ENUM_TIMEFRAMES>("timeframes")
.value("CURRENT", PERIOD_CURRENT)
.value("M1", PERIOD_M1)
.value("M2", PERIOD_M2)
.value("M3", PERIOD_M3)
.value("M3", PERIOD_M3)
.value("M5", PERIOD_M5)
.value("M6", PERIOD_M6)
.value("M10", PERIOD_M10)
.value("M12", PERIOD_M12)
.value("M15", PERIOD_M15)
.value("M20", PERIOD_M20)
.value("M30", PERIOD_M30)
.value("H1", PERIOD_H1)
.value("H3", PERIOD_H3)
.value("H4", PERIOD_H4)
.value("H6", PERIOD_H6)
.value("H8", PERIOD_H8)
.value("H12", PERIOD_H12)
.value("D1", PERIOD_D1)
.value("W1", PERIOD_W1)
.value("MN1", PERIOD_MN1);
}
#endif

#endif

// Define type of periods.
Expand Down
10 changes: 10 additions & 0 deletions Indicator/IndicatorBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -356,3 +356,13 @@ class IndicatorBase : public Object {
#endif
}
};

#ifdef EMSCRIPTEN
#include <emscripten.h>
#include <emscripten/bind.h>

EMSCRIPTEN_BINDINGS(IndicatorBase) {
emscripten::class_<IndicatorBase>("IndicatorBase").smart_ptr<Ref<IndicatorBase>>("Ref<IndicatorBase>");
}

#endif
15 changes: 15 additions & 0 deletions Indicator/IndicatorData.h
Original file line number Diff line number Diff line change
Expand Up @@ -1965,4 +1965,19 @@ IValueStorage* ExternInstantiateIndicatorBufferValueStorageDouble::InstantiateIn
int GetBarsFromStart(IndicatorData* _indi) { return _indi PTR_DEREF GetBars(); }
#endif

#ifdef EMSCRIPTEN
#include <emscripten.h>
#include <emscripten/bind.h>

EMSCRIPTEN_BINDINGS(IndicatorData) {
emscripten::class_<IndicatorData, emscripten::base<IndicatorBase>>("IndicatorData")
.smart_ptr<Ref<IndicatorData>>("Ref<IndicatorData>")
.function("SetSource", emscripten::optional_override([](IndicatorData& self, IndicatorData* base) {
self.SetDataSource(base);
}),
emscripten::allow_raw_pointer<emscripten::arg<0>>());
}

#endif

#endif // INDICATOR_DATA_H
30 changes: 30 additions & 0 deletions Indicator/tests/classes/IndicatorTfDummy.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,3 +68,33 @@ class IndicatorTfDummy : public IndicatorTf<IndicatorTfDummyParams> {
#endif
}
};

#ifdef EMSCRIPTEN
#include <emscripten/bind.h>

EMSCRIPTEN_BINDINGS(IndicatorTfDummyParams) { emscripten::value_object<IndicatorTfDummyParams>("indicators.TfParams"); }

EMSCRIPTEN_BINDINGS(IndicatorTfDummyBaseBaseBase) {
emscripten::class_<Indicator<IndicatorTfDummyParams>, emscripten::base<IndicatorData>>(
"IndicatorTfDummyBaseBaseBase");
}

EMSCRIPTEN_BINDINGS(IndicatorTfDummyBaseBase) {
emscripten::class_<IndicatorCandle<IndicatorTfDummyParams, double, ItemsHistoryTfCandleProvider<double>>,
emscripten::base<Indicator<IndicatorTfDummyParams>>>("IndicatorTfDummyBaseBase");
}

EMSCRIPTEN_BINDINGS(IndicatorTfDummyBase) {
emscripten::class_<
IndicatorTf<IndicatorTfDummyParams>,
emscripten::base<IndicatorCandle<IndicatorTfDummyParams, double, ItemsHistoryTfCandleProvider<double>>>>(
"IndicatorTfDummyBase");
}

EMSCRIPTEN_BINDINGS(IndicatorTfDummy) {
emscripten::class_<IndicatorTfDummy, emscripten::base<IndicatorTf<IndicatorTfDummyParams>>>("indicators.Tf")
.smart_ptr<Ref<IndicatorTfDummy>>("Ref<IndicatorTfDummy>")
.constructor<ENUM_TIMEFRAMES>();
}

#endif
17 changes: 12 additions & 5 deletions Indicators/Tick/Indi_TickProvider.h
Original file line number Diff line number Diff line change
Expand Up @@ -128,18 +128,25 @@ class Indi_TickProvider : public IndicatorTick<Indi_TickProviderParams, double,
#ifdef EMSCRIPTEN
#include <emscripten/bind.h>

EMSCRIPTEN_BINDINGS(Indi_TickProviderBaseBase) {
emscripten::class_<Indicator<Indi_TickProviderParams>, emscripten::base<IndicatorData>>("IndiTickProviderBaseBase")
.smart_ptr<Ref<Indicator<Indi_TickProviderParams>>>("Ref<Indicator<Indi_TickProviderParams>>");
}

EMSCRIPTEN_BINDINGS(Indi_TickProviderBase) {
emscripten::class_<IndicatorTick<Indi_TickProviderParams, double, ItemsHistoryTickProvider<double>>>(
"IndiTickProviderBase");
emscripten::class_<IndicatorTick<Indi_TickProviderParams, double, ItemsHistoryTickProvider<double>>,
emscripten::base<Indicator<Indi_TickProviderParams>>>("IndiTickProviderBas e")
.smart_ptr<Ref<IndicatorTick<Indi_TickProviderParams, double, ItemsHistoryTickProvider<double>>>>(
"Ref<IndicatorTick<Indi_TickProviderParams, double, ItemsHistoryTickProvider<double>>");
}

EMSCRIPTEN_BINDINGS(Indi_TickProvider) {
emscripten::class_<
Indi_TickProvider,
emscripten::base<IndicatorTick<Indi_TickProviderParams, double, ItemsHistoryTickProvider<double>>>>(
"Indi_TickProvider")
//.smart_ptr<Ref<Indi_TickProvider>>("Ref<Indi_TickProvider>")
.constructor<>()
"indicators.TickProvider")
.smart_ptr<Ref<Indi_TickProvider>>("Ref<Indi_TickProvider>")
.constructor(emscripten::optional_override([]() { return Ref<Indi_TickProvider>(new Indi_TickProvider()); }))
.function("BufferSize", &Indi_TickProvider::BufferSize)
.function("Feed", &Indi_TickProvider::Feed);
}
Expand Down
1 change: 0 additions & 1 deletion Platform.h
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,6 @@ class Platform {

// Checking starting periods and updating time to current one.
time_flags = time.GetStartedPeriods();
time.Update();

DictStructIterator<long, Ref<IndicatorData>> _iter;

Expand Down
7 changes: 7 additions & 0 deletions Refs.struct.h
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,13 @@ struct Ref {
*/
~Ref() { Unset(); }

#ifndef __MQL__
template <typename R>
operator Ref<R>() {
return Ref<R>(ptr_object);
}
#endif

/**
* Returns pointer to target object.
*/
Expand Down

0 comments on commit 42de20c

Please sign in to comment.