Jump to content
Tom Next - Daytrading Community

Projekt: Entwicklung Community-EA


Wir bauen ein TomNext EA für Metatrader  

60 members have voted

  1. 1. Besteht Interesse zusammen ein EA zu bauen für Metatrader??



Recommended Posts

Obwohl ich beim Chandelier noch etwas Zweifel habe, da er eben kein "Standardindikator" ist. Aber anscheinend auch nicht so hoch-wissenschaftlich als das man ihn nicht in eine Funktion quetschen könnte.

 

So wie ich es verstanden habe is es HH[x] - y*ATR... is nit schlimm rocket science ;)

Link to comment
Share on other sites

... als das man ihn nicht in eine Funktion quetschen könnte.

 

Ich habe ein Aufrufbeispiel für den Chandelier in einer Funktionshülle beigefügt und darüberhinaus den Indikator selbst beigefügt.

 

Aufrufbeispiel ChandelierExit.mq4

ChandelierExit.mq4

 

Einer der beiden Buffer ist immer EMPTY und der andere weist einen double-Value auf.

Diese Funktionshülle habe ich in einer Include-Datei und gebe beide Buffer über die Funktion als Zeiger zurück.

 

Soll nur als Aufrufbeispiel gelten, kann man natürlich nach Gusto auch irgendwie anders quetschen, sind ja nur zwei Buffer.

  • Upvote 2
Link to comment
Share on other sites

Ok, bin mir nur nit sicher wo teilen/wie teilen und ob nicht die diskussion drüber gleich lang dauert wie das coden der ersten Version ;)

 

Vorschlag :

 

- Flussdiagramm und dabei (fast) alles modularisieren

- zusätzlich tabellarisches Auflisten zum Beispiel in Excel für die folgenden Schritte =>

- gemeinsames Formulieren hier, welches Modul was zu erledigen hat, welcher Input und welcher Output benötigt wird , welche DebuggMöglichkeiten der jeweilige Coder vorsehen soll

- wenn wir das komplett haben, dann kann jeder den Schwierigkeitsgrad der einzelnen Module abschätzen und seine verfügbare (Frei)zeit mit berücksichtigen und sich entsprechend für Module(e) melden

- dann so wie Wolf in #153

- der Boss koordiniert ,s.a. Deine Wochenposts jeden Montag , in denen Du immer uns allen den Überblick des Projektes vermittelst, finde ich vorbildlich , Beispiel #119, lasse sie mich bitte als "Milestones" bezeichnen . Dazwischen läßt Du allen Teilnehmern Luft für Diskusionen aller Art zu diesem Thema, aber einmal die Woche kommen wir alle wieder auf einen gemeinsamen Nenner , Deine Zusammenfassung wie in #119 eben . Finde ich Spitze , Danke Dir dafür. Aber wenn wir dann über Codeschnipsel diskutieren wollen, dann können wir das während der Woche ja machen bis zum nächsten Milestone .

- jeder der ein Steinchen Code übernimmt muss es zum Termin fertig haben oder vorher um Hilfe rufen , zum Beispiel am Sonntag morgen, wenn am Montag morgen der Abgabetermin sein sollte . Dann kann man immer noch rechtzeitig geholfen werden und das Team erreicht das Ziel ontime .

 

Gut/nicht Gut ?

 

Lobo

Edited by Lobo.Trader
Link to comment
Share on other sites

Vorschlag :

- Flussdiagramm und dabei (fast) alles modularisieren

...

Gut/nicht Gut ?

Finde ich sehr gut. Das heißt aber auch: wir werden viel Zeit mit Projektmanagement und -Koordination verbringen. Das ist allerdings aus meiner Sicht vollkommen in Ordnung. Der Mehrwert des Community-EA soll ja (neben dem eigentlichen EA) die gemeinschaftliche Entwicklung sein. Da schadet ein Flußdiagramm, welches den großen Zusammenhang aufzeigt, nicht. So kann sich jeder (auch später noch) reinfinden.

 

Außerdem soll der Thread für Neulinge in der (MT4-)Programmierung als Orientierung dienen. Ein erfahrener Entwickler hat ein Flußdiagramm bei überschaubaren Projekten im Kopf. Bei den meisten Neueinsteiger scheitert eine Umsetzung in Programmcode jedoch an einem fehlenden Ablaufplan.

Link to comment
Share on other sites

- Flussdiagramm und dabei (fast) alles modularisieren

 

(fast) alles modularisieren => voll einverstanden, nur so, sonst entsteht Chaos !

 

Ein erfahrener Entwickler hat ein Flußdiagramm bei überschaubaren Projekten im Kopf. Bei den meisten Neueinsteiger scheitert eine Umsetzung in Programmcode jedoch an einem fehlenden Ablaufplan.

 

@Lobo

@RAINWORM

Ohne vom Wochenthema "Positionsgröße" weiter abzulenken, Struktogramme sind m.E. wie der Name schon sagt, strukturierter als Flussdiagramme. Vielleicht meint ihr ja auch diese Art von Diagrammen ?

 

Falls nicht, schaut euch doch mal bei http://de.wikipedia.org/wiki/Nassi-Shneiderman-Diagramm einige sog. "Nassi-Shneidermann-Diagramme" an. Weiterbildung kann nie schaden !

 

Mein Favorit ist der http://www.whiledo.de/programm.php?p=struktogrammeditor weil dieser einfach und überschaubar ist. Und da dies Freeware ist, ist es auch keine Schleichwerbung. Ich bin trotzdem mit dem Autor nicht verwandt oder verschwägert !

 

Dennoch ist der Aufwand für die Diagrammerstellung nicht unerheblich, würde ich daher nicht zur "Pflicht" erheben wollen, sonst schreckt man nur potentielle Entwickler ab.

 

Nur bei echt komplexem Code ist ein vom Autor erstelltes Struktogramm (nicht nur für Anfänger) sehr hilfreich, notfalls muss man sich halt auf einem Blatt Papier ein Struktogramm zum (fremden) Code selbst hinkritzeln - mach ich häufiger - hilft ungemein zum Verständnis und für den Überblick !

 

Gruß, Der Wolf

Link to comment
Share on other sites

Vorschlag :

 

- Flussdiagramm und dabei (fast) alles modularisieren

 

Leider war ich nicht präzise . Das korrigiere ich .

 

Also präzisieren mit Hilfe von Mein Link

 

und durch eindeutiges ersetzen : Ich meinte eigentlich Mein Link

 

Und (fast) immer , wenn ich keinen Programmablaufplan vorher erstelle brauche ich hinterher länger

 

Aber nun zum MM wie uns der Chef aufgefordert hat ?

 

Lobo

Link to comment
Share on other sites

Aber nun zum MM wie uns der Chef aufgefordert hat ?

 

ich nix chef. Es gibt derzeit eh erst 2 Vorschläge zum MM:

- % von Equity riskieren

- fixe lotsize

 

Da es um MM vermutlich nit viel diskussion gibt (in der ersten Version):

wer will kann ja schon ein flussdiagram vorbereiten.

bisher fixierte Module:

 

Markt

Start mit EURUSD, Einstiege auf kleinem TF (~M15/M30), Trendfilter etwas übergeordnet (zB H4)

 

Einstiege

übergeordneter Trend erkannt durch Abstand von 2 MAs, dient als Filter für die Einstiege.

Einstieg wenn Heiken Ashi dreht und Filter in die gleiche Richtung zeigt.

 

Exits

als Pool implementiert wobei jeder einzelne per Parameter dazu/weggeschalten werden kann für Tests.

Chandelier als InitStop + Trailing (per Parameter trailing ausschaltbar)

Parabolic als zusätzlicher Trailing (max(chandelier,parabolic)), wobei AccStart= 0.

Breakeven nach Anstieg um x*ATR

Timeout wenn y Bars lang kein neues HH (im long fall)

TP mit fixem Abstand

Link to comment
Share on other sites

- fixe lotsize

 

1.) RM/MM

Fände es schon gut, wenn wir zwar in kleinen TF beginnend, den Trades dann soviel Luft lassen (TP), dass wir Gewinne laufen lassen können .

 

Daher : Entry mit 0,01 LOT, also der kleinst möglichen Marktgewalt . Wenn dieser Trade dann aber in den Gewinn gelaufen sein sollte,dann könnten wir einen TSL nachziehen und diesen Trade im Gewinn bei BreakEven (BE) absichern, dadurch das Risiko auf Null setzen und dann noch einen neuen Trade nachziehen (!= fixe lotsize sondern Pyramide) ?

 

Würde uns mehr Profitchance bieten .

 

Dagegen spricht dann aber eher, dass wir ja im Intraday sind und mit TP es ausschließen, dass wir Gewinne laufen lassen wollen .

 

2.) Programmablaufplan :

 

2.1.) Darstellung :

 

Wollen wir einen gemeinsamen Standard verwenden ? http://commons.wikimedia.org/wiki/Flow_chart?uselang=de nach DIN 66001 oder soll jeder so machen, wie er sich am wohlsten fühlt? Da gibt es ja auch den von Dir angezogenen Nassi Sneiderman DIN 66261 Mein Link der die Logik ja auch schön aufzeigt mir aber den eigentlichen Ablauf des Code nicht genug visualisiert (Schleifen und Module)

 

2.2) @all :

 

Gibt es eine Software die es am PC gestattet , diese Programmabläufe zu zeichnen ? Sonst proboiere ich ppt .

 

Lobo

Edited by Lobo.Trader
Link to comment
Share on other sites

1.) RM/MM

Fände es schon gut, wenn wir zwar in kleinen TF beginnend, den Trades dann soviel Luft lassen (TP), dass wir Gewinne laufen lassen können .Daher : Entry mit 0,01 LOT, also der kleinst möglichen Marktgewalt .

[...]

Zunächst denke ich mal, dass keiner so blauäugig sein wird und das Ding direkt auf seinem Konto laufen lässt. Insofern bin ich für den praxisnahen Fall, ein gewisses Risiko aufs Kapital einzugehen. Wie groß das sein soll, kann man ja dann individuell direkt im EA eingeben und/oder wir legen uns auf eine Größe fest. Ob man Gewinne laufen lassen kann oder nicht, ist ja letztendlich nicht von der Positionsgröße sondern vom Marktverhalten abhängig.

Link to comment
Share on other sites

1.) RM/MM

Fände es schon gut, wenn wir zwar in kleinen TF beginnend, den Trades dann soviel Luft lassen (TP), dass wir Gewinne laufen lassen können .

 

Daher : Entry mit 0,01 LOT, also der kleinst möglichen Marktgewalt . Wenn dieser Trade dann aber in den Gewinn gelaufen sein sollte,dann könnten wir einen TSL nachziehen und diesen Trade im Gewinn bei BreakEven (BE) absichern, dadurch das Risiko auf Null setzen und dann noch einen neuen Trade nachziehen (!= fixe lotsize sondern Pyramide) ?

 

Würde uns mehr Profitchance bieten .

 

Dagegen spricht dann aber eher, dass wir ja im Intraday sind und mit TP es ausschließen, dass wir Gewinne laufen lassen wollen .

 

2.) Programmablaufplan :

 

2.1.) Darstellung :

 

Wollen wir einen gemeinsamen Standard verwenden ? http://commons.wikim...hart?uselang=de nach DIN 66001 oder soll jeder so machen, wie er sich am wohlsten fühlt? Da gibt es ja auch den von Dir angezogenen Nassi Sneiderman DIN 66261 Mein Link der die Logik ja auch schön aufzeigt mir aber den eigentlichen Ablauf des Code nicht genug visualisiert (Schleifen und Module)

 

2.2) @all :

 

Gibt es eine Software die es am PC gestattet , diese Programmabläufe zu zeichnen ? Sonst proboiere ich ppt .

 

Lobo

 

Nassi_word_dot

 

structorizer

 

Vips

 

Struktogrammeditor

 

yEDPapdesigner

 

sollte reichen...:blackjack: :palomitas:

 

 

 

mtbf40

Link to comment
Share on other sites

Hallo zusammen,

 

im (noch aktuellen) TRADERS'-Magazin Oktober 2011 gibt es auf Seite 72 den Artikel "Die optimale Positionsgröße im Trading" von Wieland Arlt.

Auch hier: soll keine Schleichwerbung sein, bin weder verwandt, verschwägert (oder verheiratet) mit Verlag oder Autor ...,

 

Das passt doch genau zum Thema, daher will ich Euch das Fazit dieses Artikel's möglichst kurz darstellen.

 

Der Autor unterscheidet mehrere Wege zur Positionsgrößenbestimmung:

1. den Handel einer festen Stückzahl

2. den Handel einer festen Positionsgröße, d.h. der eingesetzte Betrag ist fix, die Stückzahl (Lotsize) ist variabel

3. den Handel mit einem festen Risikobetrag, d.h. x Prozent vom Ausgangswert eines Depot's

4. den Handel mit einem festen, am aktuellen Depotstand angepassten Risikobetrag, d.h. x Prozent vom aktuellen Depotwert

 

Nach Durchspielen einiger hypothetischer Beispiele erachtet der Autor die Variante 4. als sinnvoll, da zumindest die Varianten 1. und 2. das Risiko überproportional erhöhen würden. Die Anpassung am aktuellen Depotstand muss nicht nach jedem Trade erfolgen, sondern kann natürlich auch schrittweise erfolgen, z.B. in 5%-Schritten vom ursprünglichen Depotwert.

 

Die Ermittlung der optimalen Positionsgröße geschieht also folgendermassen:

a) Vorgabe eines Prozentwertes des Risikobetrages

b) Ermitteln der Differenz zwischen Markteinstiegspreis und initial Stoploss

c) Ermitteln des Risikobetrages vom aktuellen Depotwert

d) Dividieren des Risikobetrages durch die Differenz ergibt die handelbare Stückzahl

 

Eigenes Beispiel:

a) 1 % Risiko

b) z.B. DAX Einstieg long bei 6300 - initial Stop 6260 = 40

c) 1 % von 5000,-- EUR = 50,-- EUR

d) 50 / 40 = 1,25

=> abrunden, maximal 1 Dax-Cfd wäre (ohne Berücksichtigung von Minilots bzw. Microlots) handelbar

 

Mein Fazit:

Das sind zwar schöne Berechnungen, die davon ausgehen, daß auf einem Konto nur ein Instrument gehandelt wird.

 

Realität ist doch, das vielleicht zwei oder drei Instrumente gehandelt werden, gerade im Forex-Markt wegen evtl. Korrelationen.

 

Da wird die Festlegung der Depotgröße schon etwas komplexer. Die müßte sozusagen "virtuell" erfolgen.

Beispiel: Ich will auf einem 10.000 EUR Konto drei Währungspaare und einen Index handeln.

Dann teile ich das Depot virtuell in vier Unterdepots zu je 2500 EUR bzw. auch in völlig anderen Relationen auf.

 

Die Ermittlung des aktuellen Depotstandes wird dann schon schwieriger, bzw. müsste dann wohl nur je nach Depot- bzw. Einzelperformance manuell vorgegeben werden ?

 

Oder man betrachtet völlig unabhängig das Gesamtdepot als "Basket" und riskiert dann eben bei z.B. vier Werten nur jeweils 0,25 % Risiko ?

 

Wie sehr ihr das ?

  • Upvote 4
Link to comment
Share on other sites

Wollen wir einen gemeinsamen Standard verwenden ?

Ich denke, jeder hat da so seine Favoriten.

Ich hab die Nassi's nur reingebracht weil von zwei Seiten Flußdiagramme bzw. Programmablaufpläne vorgeschlagen wurden, und ich persönlich aus alter Gewohnheit Nassi's pinsel.

Hab halt gedacht, falls das keiner kennt, dann stelle ich das eben mal vor.

 

Meine Meinung: Einen Standard würde ich da nicht draus machen wollen !

Link to comment
Share on other sites

Exits

als Pool implementiert wobei jeder einzelne per Parameter dazu/weggeschalten werden kann für Tests.

Chandelier als InitStop + Trailing (per Parameter trailing ausschaltbar)

Parabolic als zusätzlicher Trailing (max(chandelier,parabolic)), wobei AccStart= 0.

Hier ne PDF zu Par/Sar und Chandelier von Charles LeBeau

 

PDF

  • Upvote 4
Link to comment
Share on other sites

Wie sehr ihr das ?

 

Sorry die späte Antwort, aber ich bin derzeit gesundheitlich ein wenig "eingeschränkt" was meine Aktivität hier deutlich reduziert.

 

Zur Frage: Ich hab es bis jetzt immer so gehandhabt, das jeder EA auf die Gesamtequity arbeitet, aber eben dementsprechend weniger Risiko bekommt (also statt zB 5% bei 4 EAs jeder 1.5%, bzw. gewichtet je nach "erwarteter Profitabilität").

 

@Vola: Pyramidisieren klingt an sich spannend, die Frage ist ob man einfach "blind" pyramidisiert sobald der Trade "genug" im Gewinn ist, oder ob man erst bei neuem Einstiegssignal (also wenn der HA kurz korrigiert und wieder anzieht) die Position ausbaut. Würde ich aber eher als "advanced topic" und damit nach Version 1 sehen.

 

Sofern ich nix überlesen hab stehen wir also immer noch bei den 2 Varianten:

- fixe Lotsize

- % risiko von der Equity

 

Da unser stopabstand variabel ist, ist es vermutlich für die "gleichberechtigung" der Trades vor allem in den Tests besser mit % risiko zu arbeiten. Alternativ auch nicht % der Equity sondern fix immer x Euro risikieren pro trade. Sonst werden Trades mit weiterem Stop "unfair" höher gewichtet als solche mit engem Stop.

Link to comment
Share on other sites

Da unser stopabstand variabel ist, ist es vermutlich für die "gleichberechtigung" der Trades vor allem in den Tests besser mit % risiko zu arbeiten. Alternativ auch nicht % der Equity sondern fix immer x Euro risikieren pro trade. Sonst werden Trades mit weiterem Stop "unfair" höher gewichtet als solche mit engem Stop.

Da das Handling an dieser Stelle nicht kompliziert ist, würd ich vorschlagen, das Risiko über Parameter einstellbar zu machen.

a) %Equity

b) fixer Betrag als Risk (wenn %Equity==0)

c) fixe Lotzahl (wenn a) und b) == 0)

Dann kann jeder Rumprobieren wie er gerade Lustig ist. :senile:

Link to comment
Share on other sites

@Mythos

Erstmal wünsche ich Dir Gute Besserung !

 

Zur Frage: Ich hab es bis jetzt immer so gehandhabt, das jeder EA auf die Gesamtequity arbeitet, aber eben dementsprechend weniger Risiko bekommt

Vielen Dank für Dein Statement !

 

@Vola

Danke für's PDF, gut recherchiert !

 

@WOGO

Guter Vorschlag, würde ich mich voll anschliessen.

Link to comment
Share on other sites

Ok, ich glaube wir können WOGOs vorschlag als angenommen betrachten.

 

Der Entwicklung der ersten Version steht also nix im Weg. Hier nochmal in einem Post zusammengefasst alle Module:

 

Markt

Start mit EURUSD, Einstiege auf kleinem TF (~M15/M30), Trendfilter etwas übergeordnet (zB H4)

 

Einstiege

übergeordneter Trend erkannt durch Abstand von 2 MAs, dient als Filter für die Einstiege.

Einstieg wenn Heiken Ashi dreht und Filter in die gleiche Richtung zeigt.

 

Exits

als Pool implementiert wobei jeder einzelne per Parameter dazu/weggeschalten werden kann für Tests.

Chandelier als InitStop + Trailing (per Parameter trailing ausschaltbar)

Parabolic als zusätzlicher Trailing (max(chandelier,parabolic)), wobei AccStart= 0.

Breakeven nach Anstieg um x*ATR

Timeout wenn y Bars lang kein neues HH (im long fall)

TP mit fixem Abstand

 

Positionsgröße 3 Varianten:

a) %Equity - es wird immer der angegebene % der Equity pro Trade risikiert

b) fixer Betrag als Risk (wenn %Equity==0)

c) fixe Lotzahl (wenn a) und b) == 0)

 

 

Bevor sich jetzt alle wild in die Implementierung stürzen würd ich folgendes vorschlagen (wurde auch schon öfters vorgeschlagen, ich wiederhols eigentlich nur):

Aufteilung/Auslagerung des ganzen in mehrere Module wodurch die eigentliche start() nur was in der Form

processOpenOrders();

filter= calcFilter(...);
entry= calcEntry(...);
if(filter * entry > 0 && isNewOrderAllowed()) {
 stopdiff= calcInitStopDiff(...);
 tp= calcTP(...);
 size= calcSize(...);
 OrderSend(...);
}

wäre.

 

calcFilter und calcEntry retounieren -1 für short, 0 für flat und 1 für long.

processOpenOrders geht alle offenen Orders durch und könnte Unterfunktionen für Nachzug des Trailing, setzen auf Breakeven und ggf. andere Exits aufrufen und dementsprechend pro Order agieren.

calcInitStopDiff, calcSize und calcTP is eh selbsterklärend ;)

 

Die (unabhängigen) Module wären aus meiner Sicht also sehr einfach die Funktionen die hier vorkommen. man könnte das ProcessOrders noch aufteilen.

fürs OrderSend um hier errorhandling etc. reinzubringen schlag ich einfach mal wieder die TradeBox vor. Man muss ja nit die ganze verwenden sondern kann die Order-Funktionen herausnehmen und in den EA bauen. Dann wärs ein in sich geschlossener EA der auch für Anfänger nit zu schwer verständlich ist.

 

Konkret wäre der Vorschlag das vielleicht einer das Gerüst mit der start() vorbereitet, damit die Namen etc. klar sind, ab dann darf sich wer will ein Modul auswählen dessen Funktion er implementiert. Da brauchen wir auch keine Sourcecodeverwaltung etc. wer was an "seiner" Funktion ändert postet einfach die neue Version der Funktion. Wie gewohnt Montags gibts dann eine neue "Version" des EA wo alle geänderten Versionen eingebaut sind, dazwischen kann jeder der will die geposteten Funktionen selber einbauen.

 

Bzgl. Codingstandard haben wir das hier mal probiert. Wer will kann sich ja dran halten ;)

 

So, freu mich über Meinungen.

 

edit: link für Tradebox eingefügt, danke Wolf ;)

  • Upvote 4
Link to comment
Share on other sites

Konkret wäre der Vorschlag das vielleicht einer das Gerüst mit der start() vorbereitet, damit die Namen etc. klar sind...

Wir beginnen also von Null, oder? Das heißt, wir haben ja mal am Anfang dieses Threads ein Grundmodell gehabt. Aus meiner Sicht war das aber schon zu viel des Guten und daher fände ich es richtig, wenn wir wirklich mit start() beginnen. Sehe ich das richtig?

Link to comment
Share on other sites

Wir beginnen also von Null, oder? Das heißt, wir haben ja mal am Anfang dieses Threads ein Grundmodell gehabt. Aus meiner Sicht war das aber schon zu viel des Guten und daher fände ich es richtig, wenn wir wirklich mit start() beginnen. Sehe ich das richtig?

 

In gewisser Weise ja. Ich hab mir das Grundgerüst nochmal angeschaut. aus meiner Sicht is es für die erste Version zu heftig. Vor allem da wir ja auch den Ansatz verfolgen es für Anfänger verständlich zu machen. Das Grundgerüst ist eine gute Basis für Fortgeschrittene und ich denke wir können im Laufe der Entwicklung immer mehr Dinge davon übernehmen (so wie deine sicherheitsabfragen etc.). Für die erste Version hier schlag ich aber deswegen einen Start bei 0 vor.

  • Upvote 1
Link to comment
Share on other sites

die TradeBox................Man muss ja nit ....... die Order-Funktionen herausnehmen und in den EA bauen. Dann wärs ein in sich geschlossener EA der auch für Anfänger nit zu schwer verständlich ist.

 

Bitte darum diese zu nutzen , persönlich habe ich große Vorteile dadurch die andere Trader auch unbedingt für sich nutzen sollten . Gerade beim Thema des Ordermanagment .

 

Ansonsten auch von meiner Seite die Bitte bei "0,0" zu beginnen und dann weiter - in diesem Thread - aufzubauen .

 

Nochmal biete ich sehr gerne an, mitzuarbeiten . Aber ich brauche Vorgaben ("Lastenheft") .

 

Lobo

Link to comment
Share on other sites

Nochmal biete ich sehr gerne an, mitzuarbeiten . Aber ich brauche Vorgaben ("Lastenheft") .

 

Nachsatz zu : Es muss natürlich sinnvoll sein, wenn das Anfertigen des LH länger braucht, als das Schreiben der Include ....aber indirekt hatten wir das ja schon oben . Egal ... wenn ich was helfen kann, dann sehr gerne . Lobo

Link to comment
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.

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.

Loading...
×
×
  • Create New...